zoukankan      html  css  js  c++  java
  • 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]
    ]

    思路:动态规划,前面的构建出来了,后面根据某种关系也就可以构建出来。

    这个要根据前一行来构建下一行。这里的for循环是直接遍历当前行的个数,往里面添加多少个。这里主要运用当前行的规律

     public List<List<Integer>> generate(int numRows) {
                List<List<Integer>> result=new ArrayList<List<Integer>>();
              if(numRows==0) return result;
              List<Integer> row,pre=null;//row代表当前行,pre代表前一行
              for(int i=1;i<=numRows;i++){//第几行,第几行就有几个元素
                  row=new ArrayList<>();
          /*这里for循环中的步骤很巧妙,遍历当前行,若为开头或结尾,加1,其他情况再从前一行中计算,这样一开始就不会从前一行计算,所以不会出问题。
            
          */
    for(int j=0;j<i;j++){//当前行的元素下标 if(j==0||j==i-1) row.add(1); else row.add(pre.get(j-1)+pre.get(j));//一开始第一行第二行这里不会执行, } pre=row; result.add(row); } return result; }

     还有一种更巧妙的,直接在一个list上操作。见代码。注意最后添加的时候new一个list,不然只能添加最终结果

    class Solution {
        public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> res=new ArrayList<List<Integer>>();
            if(numRows==0) return res;
            List<Integer> list=new LinkedList<>();
            for(int i=1;i<=numRows;i++){
                list.add(1);
                for(int j=i-2;j>=1;j--){
                    list.set(j,list.get(j)+list.get(j-1));
                }
    //这里要新new一个list加进去,不然如果直接添加list,出现的情况是添加了最终结果(第一层for循环结束时的list)。
                res.add(new LinkedList<Integer>(list));
            }
            return res;
        }
    }
  • 相关阅读:
    Linux 环境变量
    sharepoint webapp 部署注意点
    如何让html中的td文字只显示部分
    作业服务笔记
    HBase全分布安装配置
    CentOS Hadoop安装配置详细
    WCF访问超时:HTTP 请求已超过xx:yy分配的超时。为此操作分配的时间可能是较长超时的一部分。
    Apache Spark支持三种分布式部署方式 standalone、spark on mesos和 spark on YARN区别
    ext3文件系统挂载优化--HBase
    CentOS安装HBase
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8080798.html
Copyright © 2011-2022 走看看