摘要:迭代法復(fù)雜度時間空間思路簡單的按照楊輝三角形的規(guī)則計算就行了。代碼加入第一個加入中間的數(shù)加入最后一個逆序相加法復(fù)雜度時間空間思路同樣用迭代的方法,根據(jù)上一層的值算下一層,不過這里每一層都在同一個上操作。
Pascal"s Triangle I
迭代法 復(fù)雜度Given numRows, generate the first numRows of Pascal"s triangle.
For example, given numRows = 5, Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
時間 O(N) 空間 O(k^2)
思路簡單的按照楊輝三角形的規(guī)則計算就行了。
代碼public class Solution { public ListPascal"s Triangle II> generate(int numRows) { List
> res = new ArrayList
>(); if(numRows <= 0) return res; List
one = new ArrayList (); one.add(1); res.add(one); for(int i = 1; i < numRows; i++){ List line = new ArrayList (); // 加入第一個1 line.add(1); // 加入中間的數(shù) for(int j = 1; j < i; j++){ line.add(res.get(i-1).get(j-1) + res.get(i-1).get(j)); } // 加入最后一個1 line.add(1); res.add(line); } return res; } }
逆序相加法 復(fù)雜度Given an index k, return the kth row of the Pascal"s triangle.
For example, given k = 3, Return [1,3,3,1].
Note: Could you optimize your algorithm to use only O(k) extra space?
時間 O(N) 空間 O(k)
思路同樣用迭代的方法,根據(jù)上一層的值算下一層,不過這里每一層都在同一個List上操作。如果我們從后向前計算,而且每次計算都用到上一個位置的數(shù)的話,我們會重復(fù)計算好幾次,導(dǎo)致結(jié)果錯誤。這里的技巧在于從后向前計算,并且每次計算用當前位置的值和上一位置的值,來更新當前位置的值。最后再在后面加個1,就是這一層的結(jié)果了。
代碼public class Solution { public List公式法 復(fù)雜度getRow(int k) { List line = new ArrayList (); // 加入第一個1 line.add(1); if(k <= 0) return line; for(int i = 1; i <= k; i++){ // 計算j+1位置的值,是根據(jù)j位置的值和j+1位置的值得到的,相當于往后位移一位 for(int j = line.size() - 2; j >= 0; j--){ line.set(j + 1, line.get(j) + line.get(j + 1)); } // 加上最后一個1 line.add(1); } return line; } }
時間 O(K) 空間 O(1)
思路更“暴力”的方法,是直接使用公式,對于第k(k>=1)層下標為i(i>=0)的位置,數(shù)字應(yīng)該為num[i-1] * (k - i) / i,由于這個乘法可能溢出,我們用一個long型臨時變量將其存起來。
注意rowIndex是0開始的,公式中k是1開始的
代碼public class Solution { public ListgetRow(int rowIndex) { // rowIndex是0開始的,我們將它加1,得到k int k = rowIndex + 1; ArrayList line = new ArrayList (); line.add(1); long tmp = 1; for(int i = 1; i < k; i++){ // 使用公式 上一個數(shù)乘以(k-i)再除以i tmp = tmp * (k - i) / i; line.add((int)tmp); } return line; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64596.html
摘要:首先要對特殊情況進行處理小于等于的情況。然后循環(huán),每一次產(chǎn)生一個,個有個元素,每個的第一個和第個元素都是對于中間的那些元素,則找出前一個的對應(yīng)位置的兩個元素加和即可得到。這一道題只要求返回形式的一行的元素即可。 118 Pascals Triangle 題目詳情 Given numRows, generate the first numRows of Pascals triangle....
摘要:楊輝三角給定一個非負整數(shù),生成楊輝三角的前行。在楊輝三角中,每個數(shù)是它左上方和右上方的數(shù)的和。另外可以在內(nèi)層循環(huán)加判斷在不等于時才加上,這樣可省略代碼段,但是這個會在每次進入第一次循環(huán)后判斷一次。本著減少資源消耗的原則,應(yīng)當提到外面。 118:Pascals Triangle 楊輝三角 Given a non-negative integer numRows, generate the...
摘要:楊輝三角給定一個非負整數(shù),生成楊輝三角的前行。在楊輝三角中,每個數(shù)是它左上方和右上方的數(shù)的和。另外可以在內(nèi)層循環(huán)加判斷在不等于時才加上,這樣可省略代碼段,但是這個會在每次進入第一次循環(huán)后判斷一次。本著減少資源消耗的原則,應(yīng)當提到外面。 118:Pascals Triangle 楊輝三角 Given a non-negative integer numRows, generate the...
摘要:公眾號愛寫作者愛寫給定一個非負索引,其中,返回楊輝三角的第行。在楊輝三角中,每個數(shù)是它左上方和右上方的數(shù)的和。示例輸入輸出進階你可以優(yōu)化你的算法到空間復(fù)雜度嗎解題思路和之前寫的那篇號楊輝三角基本類似。 公眾號:愛寫bug(ID:icodebugs)作者:愛寫bug 給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。 Given a non-negative index...
摘要:公眾號愛寫作者愛寫給定一個非負索引,其中,返回楊輝三角的第行。在楊輝三角中,每個數(shù)是它左上方和右上方的數(shù)的和。示例輸入輸出進階你可以優(yōu)化你的算法到空間復(fù)雜度嗎解題思路和之前寫的那篇號楊輝三角基本類似。 公眾號:愛寫bug(ID:icodebugs)作者:愛寫bug 給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。 Given a non-negative index...
閱讀 1895·2021-11-24 11:16
閱讀 3257·2021-09-10 10:51
閱讀 3181·2021-08-03 14:03
閱讀 1261·2019-08-29 17:03
閱讀 3238·2019-08-29 12:36
閱讀 2219·2019-08-26 14:06
閱讀 493·2019-08-23 16:32
閱讀 2662·2019-08-23 13:42