zoukankan      html  css  js  c++  java
  • 118. Pascal's Triangle杨辉三角形(全部/一行)

    [抄题]:

    Given numRows, generate the first numRows of Pascal's triangle.

    For example, given numRows = 5,
    Return

    [
         [1],
        [1,1],
       [1,2,1],
      [1,3,3,1],
     [1,4,6,4,1]
    ]
    

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    1. 要返回数据结构的,先新建 确保类型了再cc

    [奇葩corner case]:

    [思维问题]:

    不知道怎么表示

    [一句话思路]:

    做好每一行后再放进去

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 不熟悉双重嵌套:内部数组处理完了要加到外部数组中去

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    row 数组是每次临时新建的

    [总结]:

    1. 要返回数据结构的,先新建 确保类型了再cc

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    arraylist.add即可

    [关键模板化代码]:

    add两次:

    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));
                    }     
                }
                //add again
                    triangle.add(new ArrayList(row));
            }

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    class Solution {
        public List<List<Integer>> generate(int numRows) {
            
            //ini
            List<List<Integer>> triangle = new ArrayList<List<Integer>>();
            
            //cc
            if (numRows <= 0) return triangle; 
                
            //for
            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));
                    }     
                }
                //add again
                    triangle.add(new ArrayList(row));
            }
                
            //return
            return triangle;
        }
    }
    View Code

     [代码风格] :

    Given an index k, return the kth row of the Pascal's triangle.

    For example, given k = 3,
    Return [1,3,3,1].

    Note:
    Could you optimize your algorithm to use only O(k) extra space?

    [抄题]:

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    [思维问题]:

    [一句话思路]:

    只处理一行即可 

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 用get存取改变数组值的时候要用temp暂存

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    额我也不知道j为什么要倒序相加,直接背吧

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [关键模板化代码]:

    倒序+暂存

    for (int i = 1; i <= rowIndex; i++) {
                for (int j = i - 1; j >= 1; j--) {//remember reverse
                    int tmp = ret.get(j - 1) + ret.get(j);//
                    ret.set(j, tmp);
                }

    [其他解法]:

    [Follow Up]:

    做题先看这个,免得答案不一样,费事

    [LC给出的题目变变变]:

     [代码风格] :

    class Solution {
        public List<Integer> getRow(int rowIndex) {
            //ini
            List<Integer> ret = new ArrayList<Integer>();
            
            //cc
            if (rowIndex <= 0) {
                return ret;
            }
            
            //for
            ret.add(1);
            for (int i = 1; i <= rowIndex; i++) {
                for (int j = i - 1; j >= 1; j--) {//remember reverse
                    int tmp = ret.get(j - 1) + ret.get(j);//
                    ret.set(j, tmp);
                }
                ret.add(1);
            }
            
            //return
            return ret;
        }
    }
    View Code
  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8856040.html
Copyright © 2011-2022 走看看