ArrayEasyFinish
(1)Plus One
解题思路:模拟现实中做加法的方式,在个位加一,并考虑进位的情况。代码如下:
public class Solution {
public int[] plusOne(int[] digits) {
int carries = 1;
for (int i = digits.length - 1; i >= 0 && carries > 0; i--) {
int sum = digits[i] + carries;
digits[i] = sum % 10;
carries = sum / 10;
}
if (carries == 0) {
return digits;
}
int[] result = new int[digits.length + 1];
result[0] = 1;
for (int i = 1; i < result.length; i++) {
result[i] = digits[i - 1];
}
return result;
}
}
(2)Pascal's Triangle
解题思路:从示例可以看出规律:(i,j)处的值等于(i-1,j-1)和(i-1,j)处的值之和。
代码如下【应该不是最优解】:
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
if (numRows <=0){
return triangle;
}
for (int i=0; i<numRows; i++){
List<Integer> row = new ArrayList<Integer>();
for (int j=0; j<i+1; j++){
if (j==0 || j==i){
row.add(1);
} else {
row.add(triangle.get(i-1).get(j-1)+triangle.get(i-1).get(j));
}
}
triangle.add(row);
}
return triangle;
}
}
(3)Pascal's Triangle II
代码如下:
public class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> res = new ArrayList<Integer>();
for(int i = 0;i<rowIndex+1;i++) {
res.add(1);
for(int j=i-1;j>0;j--) {
res.set(j, res.get(j-1)+res.get(j));
}
}
return res;
}
}
解题思路:我们只需要一行数据,就得考虑只用一行的空间来存储结果。对于每一行我们知道如果从前往后扫,第i个元素的值等于上一行的res[i]+res[i+1],可以看到数据是往前看的,如果我们只用一行空间,那么需要的数据就会被覆盖掉。所以这里采取的方法是从后往前扫,这样每次需要的数据就是res[i]+res[i-1],我们需要的数据不会被覆盖,因为需要的res[i]只在当前步用,下一步就不需要了。这个技巧在动态规划省空间时也经常使用,主要就是看我们需要的数据是原来的数据还是新的数据来决定我们遍历的方向。时间复杂度还是O(n^2),而空间这里是O(k)来存储结果,仍然不需要额外空间。
注意:
List中的add方法是在某个指定位置(不指定的话就默认最后一位)加上某个对象,并将原来位置的那个对象向后挤一格。
set方法是将原来位置上的那个对象取代,并将原来位置上的对象返回(需要的话)。
ArrayEasyFinish的更多相关文章
随机推荐
- 第七课第三节,T语言流程语句(版本5.0)
for语句 for和while语句一样,都是用来做循环操作的,只是他们的使用方法不一样 (注:关键字,for,end) 执行流程图解: 实例代码: for(var i=0;i<20;i++) / ...
- jquery模板制作左侧导航组件
/** * Created by bmk on 16-4-25. * * 用法:在自己的js里面把左侧导航的相关图标和对应的列表项名称如下编写: * 版本更新日至按需添加 * 在js中的RNA.run ...
- msp430FR5739 FRAM的学习
FRAM,中文名称为铁电存储器..FRAM提供一种与RAM一致的性能,但又有与ROM 一样的非易失性. FRAM 克服以上二种记忆体的缺陷并合并它们的优点,它是全新创造的产品,一个非易失性随机存取储存 ...
- [原创]cocos2d-x研习录-第二阶 概念类之导演类(CCDirector)
CCDirector类是游戏的组织和控制中心(总指挥),它控制着主屏幕的显示.场景的切换和显示,以及游戏的开始.结束和暂停.它的继承关系图如下: CCDirector继承自基类CCObject, ...
- EDIUS校正颜色轮的方法
小伙伴平时肯定能在网络上看到各种各样的视频吧,它们有的搞笑,有的炫酷,有的教育......那么你们有没有想过做出带有自己创意的视频呢?其实这个愿望很容易实现的,学好一款视频编辑软件就可以了.今天小编就 ...
- pt-query-digest用法
pt-query-digest用法 http://blog.csdn.net/wxc20062006/article/details/52387505
- C# 两个集合对比获取不同
public class CompareCollection { public List<string> CompareList(List<string> oldList, L ...
- bzoj1837: [CROATIAN2009]cavli 凸包1
Description 给你N个点,请循环完成下列任务 1:求出这N个点的凸包的面积 2:拿掉最左或最右或最上或最下的一个点,当点的个数不足三个时停止 Input 第一行,一个数字N 接下来N行,每行 ...
- CDN的实现原理
在描述CDN的实现原理,让我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别: 用户提交域名→浏览器对域名进行解释→得到目的主机的IP地址→根据IP地址访问发出请 ...
- [MongoDB] 高可用架构方案
一.缘由: 众所周知,Mongodb是在高速发展期,一些特性架构难免会发生变化.这里就总结下,我目前所知道的Mongodb 的高可用架构都有哪些.目前Mongodb版本3.2. 二.结构介绍: 1.R ...