LeetCode 118:楊輝三角 II Pascal's Triangle II

公衆號:愛寫bug(ID:icodebugs) 做者:愛寫bugjava

給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。python

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.數組

img

在楊輝三角中,每一個數是它左上方和右上方的數的和。app

In Pascal's triangle, each number is the sum of the two numbers directly above it.性能

示例:優化

輸入: 3
輸出: [1,3,3,1]

進階:debug

你能夠優化你的算法到 O(k) 空間複雜度嗎?指針

解題思路:

和以前寫的那篇118號楊輝三角基本相似。這道題只是不用考慮每行輸出,只輸出最後一行。這樣只在一個數組上修改便可:該數 的值 = 該數的值+該數左邊的值之和(該數不包括第一個和最後一個數)。code

這道題只是不用考慮每一行輸出,只輸出最後一行。這樣只在一個數組上修改便可:該數 的值 = 該數的值+該數左邊的值之和(該數不包括第一個和最後一個數)。

用兩個嵌套循環,外循環是要計算的每行數組,內循環在上一次計算的數組基礎上更改數值得出該行數組。

**須要注意的是:**內循環 j 指針應該從每行的最後一個數開始更改。

若是 j 指針從左開始更改索引的值:

[1]

[1,1]

[1,2,1] 索引1 的值是索引 0 和 1的和,沒問題

[1,3,4,1] 索引2 的值是索引 2 和索引 1的和 爲4,而不是預期的3

由於咱們是在同一個數組裏更改每一個數值的,因此若是作左邊開始求值,索引 1 的值會從2變爲3,此時計算索引2的值,因爲該索引左邊的值已經改變爲3,該索引將再也不是預期值。

起先我用的是 ArrayList<Integer>()

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(1);
        for (int i = 1; i <= rowIndex; i++) {
            for (int j = i - 1; j > 0; j--) {
                nums.set(j, nums.get(j) + nums.get(j - 1));
            }
            nums.add(1);
            System.out.println(nums);
        }
        return nums;
    }
}

提交時雖然能經過可是每次調用 set()、add() 致使性能不好不好。

Java:

class Solution {
    public List<Integer> getRow(int rowIndex) {
        Integer[] nums = new Integer[rowIndex+1];//全部值被默認置爲0
        Arrays.fill(nums, 0);
        nums[0] = 1;
        for (int i = 1; i <= rowIndex; i++) {
            for (int j = i; j >0; j--) {
                nums[j] = nums[j] + nums[j-1];//當j爲1時,nums[j]爲0,不影響最後一個值,不用單獨給每行末尾賦值1
            }
        }
        return Arrays.asList(nums);//轉爲List<Integer>型並返回
    }
}

Python3:

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        nums = [1] 
        for i in range(1, rowIndex+1):
            for j in range(i-1, 0, -1):
                nums[j] +=nums[j-1]
            nums.append(1) # 須要給末尾索引賦值1
        return nums

相關文章
相關標籤/搜索