解题思路:
动态规划,一维数组一行一行向下算。
错误:
class Solution {
public:
vector<int> getRow(int rowIndex) {
if (rowIndex==0) return {1};
else if (rowIndex==1) return {1, 1};
vector<int> ans(rowIndex+1);
ans[0] = 1, ans[1] = 1;
for (int i = 2; i <= rowIndex; ++i) {
for (int j = 1; j < rowIndex; ++j) {
ans[j] = ans[j-1] + ans[j];
}
ans[i] = 1;
}
return ans;
}
};
输入3时,输出[1,3,4,1]
错误原因:for (int j = 1; j < rowIndex; ++j) {
ans[j] = ans[j-1] + ans[j];
}
从前面开始会导致重第二个数字开始,ans[j-1]就不是原先的一行的数字了
遍历过程:[1, 1, 0, 0], [1, 2, 1,0], [1, 3, 1, 0], [1, 3, 4, 0], [1, 3, 4, 1]
解决方法:从后面往前走,就可以很好的避免这样的情况
代码:
class Solution {
public:
vector<int> getRow(int rowIndex) {
if (rowIndex==0) return {1};
else if (rowIndex==1) return {1, 1};
vector<int> ans(rowIndex+1);
ans[0] = 1, ans[1] = 1;
for (int i = 2; i <= rowIndex; ++i) {
for (int j = rowIndex-1; j > 0; j--) {
ans[j] = ans[j-1] + ans[j];
}
ans[i] = 1;
}
return ans;
}
};
python:
class Solution:
def getRow(self, rowIndex: int) -> List[int]:
if rowIndex==0 :return [1]
if rowIndex==1 :return [1, 1]
ans = [1, 1]
for i in range(2, rowIndex+1) :
ans.append(1);
for j in range(i-1, 0, -1):
ans[j] = ans[j] + ans[j-1]
return ans