題目地址:http://leetcode.com/onlinejudge#question_119
題目要求:
分析:要求在O(n)的空間內獲得第k+1行的帕斯卡爾三角形的值。
假設三角形存在二維數組Data中,其組織形式如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
有以下特徵:
Data[i][0]和Data[i][i]的值均爲1
Data[i][m]=Data[i-1][m-1]+Data[i-1][m]
觀察以上規律,發現在一維數組中,逆向求解,不會破壞後續計算所需要的數值。
代碼如下:
class Solution {
public:
vector<int> getRow(int rowIndex) {
rowIndex++;
vector<int> tmp;
if(rowIndex==0) return tmp;
tmp.assign(rowIndex,0);
tmp[0]=1;
for(int i=2;i<=rowIndex;i++)
{
for(int n=i;n>=2;n--)
{
if(n==i)
{
tmp[n-1]=1;
continue;
}
tmp[n-1]=tmp[n-1]+tmp[n-2];
}
}
return tmp;
}
};
另外嘗試用了一下流迭代器輸出vector的元素,
要注意迭代器的type和vector的type匹配
代碼如下:
ostream_iterator<int> output(cout," ");
copy(tmp.begin(),tmp.end(),output);