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%,应该还有优化的地方,回头再考虑一下吧。

  • 相关阅读:
    C# 调用AForge类库操作摄像头
    Composer简介及使用实例
    asp.net mvc 接入美圣短信 验证码发送
    敏捷模式下携程的接口自动化平台演变
    17个Python的牛逼骚操作,你都OK吗?
    如何打造一份优雅的简历?
    谈谈少儿编程
    打基础一定要吃透这12类 Python 内置函数
    求职日记丨秋招面试零失败,我拿下宝洁、华为、壳牌等offer
    我只想找个测试岗,你却百般刁难我!
  • 原文地址:https://www.cnblogs.com/FannyChung/p/6545467.html
Copyright © 2011-2022 走看看