LeetCode笔记——119杨辉三角Ⅱ

题目:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 3
输出: [1,3,3,1]

进阶:

你可以优化你的算法到 O(k) 空间复杂度吗?

 

解法一:这个题和之前118的杨辉三角的思路一样,只不过在最后输出的时候只输出最后一行

class Solution {
    public List getRow(int rowIndex) {
        List> column=new ArrayList<>();
        for(int i=0;i<=rowIndex;i++)      //在这里i的范围应该包含等号,否则出错
        {
            Listline=new ArrayList<>();
            column.add(line);
            if(i==0)
                column.get(0).add(1);
            else
            {
                for(int j=0;j                 {
                    if(j==0||j==i)
                        column.get(i).add(1);
                    else{
                        int temp=column.get(i-1).get(j-1)+column.get(i-1).get(j);
                        column.get(i).add(temp);
                    }
                }
            }
        }
        return column.get(rowIndex);
    }
}

解法二:以上的算法将整个杨辉三角全部计算出来了,但是空间复杂度不满足要求,以下是网上大神们的解法:

/*
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
*/
// 268ms
public class Solution {
    public List getRow(int rowIndex) {
        List list = new ArrayList (rowIndex + 1);
        list.add(1);
        
        if (rowIndex == 0) {
            return list;
        }
        
        list.add(1);
        if (rowIndex == 1) {
            return list;
        }    
        
        for (int i = 2; i <= rowIndex; ++i) {
            list.add(1);
            for (int j = i - 1; j > 0; --j) {
                list.set(j, list.get(j) + list.get(j - 1));
            }
        }
        return list;
    }
}

在这个算法中只计算了第K行的数据,所占的空间小,空间复杂度达到要求。首先在计算第K行的元素时,有两次赋值1的操作,之后再外循环里每一个i值又有一个赋值为1 的操作。

你可能感兴趣的:(LeetCode笔记)