• 119.Pascal's Triangle II


    题目链接

    题目大意:给出第几行,返回杨辉三角里的该行数据。要求空间复杂度o(k)

    法一:这里用一个list数组实现,就会导致所有数据存在一个list中,无法分辨的问题,所以后来要新开一个list从前面的list中抽取出最后的结果数据。空间复杂度不是o(k),代码如下(耗时3ms):

     1     public List<Integer> getRow(int rowIndex) {
     2         List<Integer> list = new ArrayList<Integer>();
     3         rowIndex++;
     4         //用单list,将所有行的所有数据都存在一个list中,没有分辨
     5         for(int i = 1; i <= rowIndex; i++) {
     6             for(int j = 0; j < i; j++) {
     7                 if(j == 0 || j == i - 1) {
     8                     list.add(1);
     9                 }
    10                 else {
    11                     list.add(list.get(list.size()-i) + list.get(list.size()-i+1));
    12                 }
    13             }
    14         }
    15         //从上面得到的list中,抽取最后一行的数据
    16         List<Integer> res = new ArrayList<Integer>();
    17         for(int i = list.size() - rowIndex; i < list.size(); i++) {
    18             res.add(list.get(i));
    19         }
    20         return res;
    21     }
    View Code

     法二(借鉴):用数组值叠加的方式,从后往前叠加,空间复杂度达到o(k),list.set(2,i)表示把list中第2位的数值替换成i。代码如下(耗时2ms):

     1     public List<Integer> getRow(int rowIndex) {
     2         List<Integer> list = new ArrayList<Integer>();
     3         rowIndex++;
     4         for(int i = 0; i < rowIndex; i++) {
     5             //每遍历到一层,list中的数据就新加一个,此外别无添加,所以list的数据个数总是保持此次add后的恒定值
     6             //而这里的add其实就是将当前层的最后一个数置1
     7             list.add(1);
     8             for(int j = i - 1; j > 0; j--) {
     9                 //从当前层的倒数第二个数开始往前到第二个数,进行遍历更新
    10                 list.set(j, list.get(j - 1) + list.get(j));
    11             }
    12         }
    13         return list;
    14     }
    View Code

    模拟代码如下:

    当rowIndex=4时:

    i=0,list{1};

    i=1,list{1,1};

    i=2,list{1,1,1}->list{1,2,1};

    i=3,list{1,2,1,1}->list{1,2,3,1}->list{1,3,3,1};

    i=4,list{1,3,3,1,1}->list{1,3,3,4,1}->list{1,3,6,4,1}->list{1,4,6,4,1}

  • 相关阅读:
    Java接口面面观
    Java之今天的异常处理了吗
    Java中自动装箱与拆箱详解
    java中this关键字解析
    Java语言实现机制
    Centos7 中 service iptables save 失效
    基于JQuery网页漂浮广告窗口Js详解
    JS日历
    js时间转换
    两种方法实现在HTML页面加载完毕后运行某个js
  • 原文地址:https://www.cnblogs.com/cing/p/7791692.html
Copyright © 2020-2023  润新知