给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?
题目说用O(k)的空间,就尝试用了
class Solution {
public List<Integer> getRow(int rowIndex) {
int[] dp = new int[35];
List<Integer> list = new ArrayList<>();
dp[0] = 1;
for(int i=1;i<=rowIndex;i++) {
for(int j=i;j>=1;j--) {
if(j==i)
dp[j]=1;
else
dp[j]=dp[j]+dp[j-1];
}
}
for(int i=0;i<=rowIndex;i++)
list.add(dp[i]);
return list;
}
}
beat 100%
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> result = new ArrayList<>(rowIndex + 1);
int half =rowIndex / 2;
for (int i=0; i<=half; i++) {
if (i == 0) {
result.add(1);
} else {
long res = 1L * result.get(i-1) * (rowIndex + 1 - i) / i;
result.add((int) res);
}
}
for (int j = half + 1; j <= rowIndex; j++) {
result.add(result.get(rowIndex - j));
}
return result;
}
}