1.暴力解法
設二維陣列儲存元素,並利用a[i][j]=a[i-1][j-1]+a[i-1][j]
**如下:
class solution ;
vector> res (rowindex+1,vector(rowindex+1,0));
res[0][0]=1;
res[1][0]=1;
res[1][1]=1;
for(int i=2;i<=rowindex;i++)
for(int j=0;j<=i;j++)
if(j==0||j==i)
res[i][j]=1;
else
res[i][j]=res[i-1][j-1]+res[i-1][j];
return res[rowindex];}};
2.觀察法
用一維陣列儲存結果
觀察第0行 1
觀察第1行 1 1 //是在上一行後面新增了1
觀察第2行 1 2 1 // 是在上一行後面加1,此時陣列為1 1 1,令a[1]=a[0]+a[1],即2=1+1,
觀察第3行 1 3 3 1 //首先在上一行末尾加1,此時陣列為 1 2 1 1,令a[2]=a[1]+a[2]=2+1=3,a[1]=a[0]+a[1]=1+2=3
第四行 1 4 6 4 1 //在上一行末尾加1,1 3 3 1 1,a[3]=a[2]+a[3]=3+1=4,a[2]=a[1]+a[2]=3+3=6,a[1]=a[0]+a[1]=1+3=4
之後的每一行,首先在陣列末尾新增元素1,
然後對於該行,如果不是第乙個或最後乙個元素,設為j元素,則a[j]=a[j-1]+a[j]
**如下:
class solution
}return res; }};
3.數學公式法
楊輝三角可以看成由組合數構成
其中:且:
此時,設定pre儲存上一次的結果,然後遍歷即可
**如下:
class solution
return res; }};
楊輝三角 II
給定乙個非負索引 k,其中 k 33,返回楊輝三角的第 k 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 3 輸出 1,3,3,1 高階 你可以優化你的演算法到 o k 空間複雜度嗎?class solution if numrows 0 int array numrows num...
楊輝三角 II
給定乙個非負索引 k,其中 k 33,返回楊輝三角的第 k 行。示例 輸入 3 輸出 1,3,3,1 對於該問題,我用了 3 種實現方法 方法一 暴力破解法。楊輝三角的確定需要上一行的元素,用 currentrow 表示當前行,prerow 表示上一行,求得下標為 k 的行。此方法相當於建立了乙個 ...
119 楊輝三角 II
略。注意是用o k 的空間完成,而不要求時間複雜度 時間複雜度沒法再小了應該只能是o n 2 11 1121 1331 這個二維 從左往右表示實際題需的row陣列 從上往下表示依據時間進展,不同時刻row陣列的樣子。每次形成row陣列時,應該從最右邊的1開始生成,向左,終止於最左邊的1。而不是相反的...