码迷,mamicode.com
首页 > 其他好文 > 详细

119.Pascal's Triangle II

时间:2017-11-06 11:04:10      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:分享   script   sed   logs   index   target   rip   for循环   杨辉三角   

题目链接: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     }
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.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     }
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}

119.Pascal's Triangle II

标签:分享   script   sed   logs   index   target   rip   for循环   杨辉三角   

原文地址:http://www.cnblogs.com/cing/p/7791692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!