(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的更多相关文章

随机推荐

  1. python知识点记录(一):

    1.如何使print输出不换行: 在print语句末尾加上一个英文逗号. 2.安装第三方模块时,用pip和easy_install是一样的.下载一个setuptools.exe安装好就有easy_in ...

  2. chrome 49 版本 跨越 --args --disable-web-security --user-data-dir

    转载: 做前端的,用Ajax获取数据,是常有的事情,同域下自然没问题了,如果是不同域获取数据,浏览器就有个同源策略的限制. 如图: Origin * is not allowed by Access- ...

  3. 开启software protection报错

    错误:             我把激活Win8的拿去激活7了 ,开了oem/efi后就ID不可用.开启software protection开不了,错误2.找不到指定文件.用其他软件重新激活则是弹出 ...

  4. VC++ ADO相关

    <VC对ADO的操作> ADO概述: ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口. ADO 使您能够编写应用程序以通过 ...

  5. 关于oracle修复控制文件与数据文件不一致的问题----

    本小菜鸟周末鼓捣数据库关于rman恢复与备份方面的实验,结果不知道哪根筋搭错了,手一哆嗦,做了不知道什么操作,就出现了数据库打不开的严重状态,只能开启到mount状态,但是切换到open状态时就会报错 ...

  6. 自动装箱(boxing)和自动拆箱(unboxing)

    摘自:http://www.codeceo.com/article/java-boxing-unboxing.html Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器 ...

  7. iOS8通讯录之联系人增删查,多号码增删操作

    #import <AddressBook/AddressBook.h> #pragma mark 删除一个号码 - (void)deleteLocalMarkSuccess:(void(^ ...

  8. 使用 jQuery Mobile 与 HTML5 开发 Web App —— HTML5 离线缓存

    本文要介绍的,是 HTML5 离线网络应用程序的特性,离线网络应用程序在 W3C 中的实际名称是 "Offline Web applications" ,也称离线缓存.当用户打开浏 ...

  9. (整理)SQLServer 大数据的插入与查询

    最近几天一直在折腾大数据量的查询,最后在索引.分页存储过程和控件以及视图的帮助下,搞定了.这篇文章记录解决问题时候查看的网友的分享链接,以及大数据量数据的插入链接. DatagridView Virt ...

  10. 26. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...