119.Pascal's Triangle II
Posted 二十年后20
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了119.Pascal's Triangle II相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode.com/problems/pascals-triangle-ii/description/
题目大意:给出第几行,返回杨辉三角里的该行数据。要求空间复杂度o(k)
法一:这里用一个list数组实现,还是两层for循环,但是空间复杂度不是o(k),代码如下(耗时3ms):
1 public List<Integer> getRow(int rowIndex) { 2 List<Integer> list = new ArrayList<Integer>(); 3 rowIndex++; 4 for(int i = 1; i <= rowIndex; i++) { 5 for(int j = 0; j < i; j++) { 6 if(j == 0 || j == i - 1) { 7 list.add(1); 8 } 9 else { 10 list.add(list.get(list.size()-i) + list.get(list.size()-i+1)); 11 } 12 } 13 } 14 List<Integer> res = new ArrayList<Integer>(); 15 for(int i = list.size() - rowIndex; i < list.size(); i++) { 16 res.add(list.get(i)); 17 } 18 return res; 19 }
法二(借鉴):用数组值叠加的方式,从后往前叠加,空间复杂度达到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.add(1); 6 for(int j = i - 1; j > 0; j--) { 7 list.set(j, list.get(j - 1) + list.get(j)); 8 } 9 } 10 return list; 11 }
模拟代码如下:
当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}
以上是关于119.Pascal's Triangle II的主要内容,如果未能解决你的问题,请参考以下文章
119 Pascal's Triangle II 帕斯卡三角形 II Pascal's Triangle II