1. 程式人生 > 其它 >LeetCode 119. 楊輝三角 II(簡單)

LeetCode 119. 楊輝三角 II(簡單)

技術標籤:LeetCodeleetcode

119. 楊輝三角 II

難度簡單255收藏分享切換為英文接收動態反饋

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

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

示例:

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

進階:

你可以優化你的演算法到O(k) 空間複雜度嗎?

我的Java程式碼:

思路:計算從第0行到題目所要求的行的所有數,最後返回最後一行即可。

class Solution {
    public static List<Integer> getRow(int rowIndex) {
		int[] arr = new int[(rowIndex+1)*(rowIndex+2)/2];
		int row = 0;
		List<Integer> result = new ArrayList<Integer>();
		for(int i = 0;i < arr.length;i++) {
			if(i == (row+1)*(row+2)/2-1) {
				arr[i] = 1;
				if(i == arr.length-1) {
					break;
				}
				arr[++i] = 1;
				row++;
			}else {
				int num = i - (row)*(row+1)/2;
				arr[i] = arr[(row-1)*(row)/2+num-1]+arr[(row-1)*(row)/2+num];
			}
		}

		for(int i = (rowIndex)*(rowIndex+1)/2;i < arr.length;i++) {
			result.add(arr[i]);
		}
        return result;
    }
}

優化:滑動陣列,維護一個rowIndex長度的滑動陣列,從右到左更新陣列中元素:arr[j] = arr[j]+arr[j-1]; 即陣列中原本的元素是上一行的元素,經過計算即上一行元素相鄰量元素相加來更新陣列得到新一行的元素

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

作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/pascals-triangle-ii/solution/yang-hui-san-jiao-ii-by-leetcode-solutio-shuk/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。