zoukankan      html  css  js  c++  java
  • Array Five Finish

    (1)Plus One

    解题思路:模拟现实中做加法的方式,在个位加一,并考虑进位的情况。代码如下:

     1 public class Solution {
     2     public int[] plusOne(int[] digits) {
     3         int carries = 1;
     4         for (int i = digits.length - 1; i >= 0 && carries > 0; i--) {
     5             int sum = digits[i] + carries;
     6             digits[i] = sum % 10;
     7             carries = sum / 10;
     8         }
     9         if (carries == 0) {
    10             return digits;
    11         }
    12         int[] result = new int[digits.length + 1];
    13         result[0] = 1;
    14         for (int i = 1; i < result.length; i++) {
    15             result[i] = digits[i - 1];
    16         }
    17         return result;
    18     }
    19 }
    View Code

    (2)Pascal's Triangle

    解题思路:从示例可以看出规律:(i,j)处的值等于(i-1,j-1)和(i-1,j)处的值之和。

    代码如下【应该不是最优解】:

     1 public class Solution {
     2     public List<List<Integer>> generate(int numRows) {
     3         List<List<Integer>> triangle = new ArrayList<List<Integer>>();
     4         if (numRows <=0){
     5             return triangle;
     6         }
     7         for (int i=0; i<numRows; i++){
     8             List<Integer> row =  new ArrayList<Integer>();
     9             for (int j=0; j<i+1; j++){
    10                 if (j==0 || j==i){
    11                     row.add(1);
    12                 } else {
    13                     row.add(triangle.get(i-1).get(j-1)+triangle.get(i-1).get(j));
    14                 }
    15             }
    16             triangle.add(row);
    17         }
    18         return triangle;
    19     }
    20 }
    View Code

     (3)Pascal's Triangle II

     代码如下:

     1 public class Solution {
     2     public List<Integer> getRow(int rowIndex) {
     3         List<Integer> res = new ArrayList<Integer>();
     4         for(int i = 0;i<rowIndex+1;i++) {
     5                 res.add(1);
     6                 for(int j=i-1;j>0;j--) {
     7                     res.set(j, res.get(j-1)+res.get(j));
     8                 }
     9         }
    10         return res;
    11     }
    12 }
    View Code

    解题思路:我们只需要一行数据,就得考虑只用一行的空间来存储结果。对于每一行我们知道如果从前往后扫,第i个元素的值等于上一行的res[i]+res[i+1],可以看到数据是往前看的,如果我们只用一行空间,那么需要的数据就会被覆盖掉。所以这里采取的方法是从后往前扫,这样每次需要的数据就是res[i]+res[i-1],我们需要的数据不会被覆盖,因为需要的res[i]只在当前步用,下一步就不需要了。这个技巧在动态规划省空间时也经常使用,主要就是看我们需要的数据是原来的数据还是新的数据来决定我们遍历的方向。时间复杂度还是O(n^2),而空间这里是O(k)来存储结果,仍然不需要额外空间。

    注意:

    List中的add方法是在某个指定位置(不指定的话就默认最后一位)加上某个对象,并将原来位置的那个对象向后挤一格。

    set方法是将原来位置上的那个对象取代,并将原来位置上的对象返回(需要的话)。

  • 相关阅读:
    CSS3权威指南 25.CSS3中的动画功能
    CSS3权威指南 24.CSS3中的变形处理
    CSS3权威指南 23.背景与边框相关样式
    CSS3权威指南 22.盒相关样式
    CSS3权威指南 20.使用选择器在页面中插入内容
    CSS3权威指南 19.选择器
    vivado中如何使用chipscope
    示波器X1探头和X10探头
    两个MMCM共享时钟输入时的严重警告和错误
    ZYNQ基础知识一
  • 原文地址:https://www.cnblogs.com/struggleli/p/6137015.html
Copyright © 2011-2022 走看看