C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二)
[LeetCode] 119. Pascal's Triangle II 楊輝三角之二
Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle.
Note that the row index starts from 0.

In Pascal's triangle, each number is the sum of the two numbers directly above it.
Example:
Input: 3
Output: [1,3,3,1]
Follow up:
Could you optimize your algorithm to use only O(k) extra space?
楊輝三角想必大家并不陌生,應(yīng)該最早出現(xiàn)在初高中的數(shù)學(xué)中,其實(shí)就是二項(xiàng)式系數(shù)的一種寫(xiě)法。
?。?br /> 1?。?br /> 1?。病。?br /> 1?。场。场。?br /> 1?。础。丁。础。?br /> 1?。怠?0 10 5?。?br /> 1?。丁?5 20 15?。丁。?br /> 1?。贰?1 35 35 21?。贰。?br /> 1?。浮?8 56 70 56 28?。浮。?/p>
楊輝三角形第n層(頂層稱第0層,第1行,第n層即第 n+1 行,此處n為包含0在內(nèi)的自然數(shù))正好對(duì)應(yīng)于二項(xiàng)式 \left(a+b\right)^{n} 展開(kāi)的系數(shù)。例如第二層 1 2 1 是冪指數(shù)為2的二項(xiàng)式\left(a+b\right)^{2} 展開(kāi)形式a^{2}+2ab+b^{2} 的系數(shù)。
由于題目有額外限制條件,程序只能使用 O(k) 的額外空間,那么這樣就不能把每行都算出來(lái),而是要用其他的方法, 我最先考慮用的是第三條性質(zhì),算出每個(gè)組合數(shù)來(lái)生成第n行系數(shù)。本地調(diào)試輸出前十行,沒(méi)啥問(wèn)題,拿到 OJ 上測(cè)試,程序在第 18 行跪了,中間有個(gè)系數(shù)不正確。那么問(wèn)題出在哪了呢,仔細(xì)找找,原來(lái)出在計(jì)算組合數(shù)那里,由于算組合數(shù)時(shí)需要算連乘,而整型數(shù) int 的數(shù)值范圍只有 -32768 到 32768 之間,那么一旦n值過(guò)大,連乘肯定無(wú)法計(jì)算。而喪心病狂的 OJ 肯定會(huì)測(cè)試到成百上千行,所以這個(gè)方法不行。那么我們?cè)賮?lái)考慮利用第五條性質(zhì),除了第一個(gè)和最后一個(gè)數(shù)字之外,其他的數(shù)字都是上一行左右兩個(gè)值之和。那么我們只需要兩個(gè) for 循環(huán),除了第一個(gè)數(shù)為1之外,后面的數(shù)都是上一次循環(huán)的數(shù)值加上它前面位置的數(shù)值之和,不停地更新每一個(gè)位置的值,便可以得到第n行的數(shù)字,具體實(shí)現(xiàn)代碼如下:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res(rowIndex + 1);
res[0] = 1;
for (int i = 1; i <= rowIndex; ++i) {
for (int j = i; j >= 1; --j) {
res[j] += res[j - 1];
}
}
return res;
}
};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/119
類似題目:
參考資料:
https://leetcode.com/problems/pascals-triangle-ii/
https://leetcode.com/problems/pascals-triangle-ii/discuss/38420/Here-is-my-brief-O(k)-solution
到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)楊輝三角之二內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
嵌入式C實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā)技巧:對(duì)一個(gè)有規(guī)律的數(shù)組表進(jìn)行位移操作的方法
今天小編就為大家分享一篇關(guān)于嵌入式C實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā)技巧:對(duì)一個(gè)有規(guī)律的數(shù)組表進(jìn)行位移操作的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
利用C語(yǔ)言實(shí)現(xiàn)將格式化數(shù)據(jù)和字符串相互轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了2個(gè)函數(shù),分別是sprintf和sscanf,可以用來(lái)實(shí)現(xiàn)將格式化數(shù)據(jù)和字符串相互轉(zhuǎn)換,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
C語(yǔ)言中判斷int,long型等變量是否賦值的方法詳解
聲明了int ,long型等局部變量,在利用一些方法給這些變量賦值之后,想判斷這些變量是不是真的被賦初值了,怎么辦2013-07-07
C++中線性代數(shù)計(jì)算Eigen庫(kù)的使用教程詳解
Eigen是一個(gè)基于線性代數(shù)的C++模板庫(kù),主要用于矩陣、向量、數(shù)值求解和相關(guān)算法,本文主要為大家簡(jiǎn)單聊聊Eigen庫(kù)的使用,希望對(duì)大家有所幫助2023-12-12
C語(yǔ)言system 自動(dòng)關(guān)機(jī)函數(shù)代碼
這篇文章主要介紹了C語(yǔ)言system 自動(dòng)關(guān)機(jī)函數(shù)代碼,需要的朋友可以參考下2016-04-04
C語(yǔ)言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
OpenCV + MFC實(shí)現(xiàn)簡(jiǎn)單人臉識(shí)別
這篇文章主要為大家詳細(xì)介紹了OpenCV + MFC實(shí)現(xiàn)簡(jiǎn)單人臉識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08

