zoukankan      html  css  js  c++  java
  • LeetCode118. Pascal's Triangle 杨辉三角

    题目

    给定行数,生成对应的杨辉三角

    思考

    1. 同一行是对称的,最大的下标为(行数+1)/2;1,1,2,3,6;下标从0开始,则对应分别为0.0.1.1.2.2
    2. 对于第偶数行,个数也是偶数,对于奇数行,个数也是奇数
    3. 而且对于非第一列的数,d[i][j]=d[i-1][j-1]+d[i-1][j]

    后面通过编程实现,发现自己第一个条件是完全没有用的,可以不需要用到对称性,直接由上一行计算下一行(即第三条)。
    而且忘记说最后一列了。

    所以新的思考点是:

    1. 对于非第一列/最后一列的数,d[i][j]=d[i-1][j-1]+d[i-1][j]
    2. 第一列和最后一列初始化为1即可

    出现过的错误

    粗心

    由于粗心把当前行数i用总行数numRows代替,所以出现了下标出界的情况Line 18: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

    没想清楚

    还有没想清楚关于对称点和i、j的关系,所以总是出界。最后考虑取消这个点,从总体情况考虑。

    局部变量带来的问题

    lineInts声明在函数域中,结果放入总的嵌套List中出了问题。然后在for的局部域中声明这个变量,问题就解决了。

    代码

        public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> results=new ArrayList<List<Integer>>(numRows);
            
            for(int i=0;i<numRows;i++){//i代表当前行数-1
                ArrayList<Integer> lineInts=new ArrayList<Integer>();//这一行的数字
                lineInts.add(1);//每行第一个是1
                int j=1;
                for(;j<i;j++){
                    int sum=results.get(i-1).get(j-1)+results.get(i-1).get(j);
                    lineInts.add(sum);
                }
                if(i>0)
                	lineInts.add(1);//最后加一个1
                
                results.add(lineInts);
            }
            return results;
        }
    

    总结

    成绩是32%,应该还有优化的地方,回头再考虑一下吧。

  • 相关阅读:
    ios开发之--UITextField光标右移
    ios开发之--复制到剪切板
    Splash scroll_position 属性
    Splash plugins_enabled 属性
    Splash images_enabled 属性
    Splash resource_timeout 属性
    Splash js_enabled 属性
    Splash args 属性
    Splash 对象属性
    Splash Lua 脚本
  • 原文地址:https://www.cnblogs.com/FannyChung/p/6545467.html
Copyright © 2011-2022 走看看