1. 程式人生 > 其它 >LeetCode0119-楊輝三角II

LeetCode0119-楊輝三角II

技術標籤:LeetCode演算法java資料結構leetcode楊輝三角II

LeetCode0119-楊輝三角II

題目:

給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。
在這裡插入圖片描述

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

示例:

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

進階:

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

程式碼:

import java.util.ArrayList;
import java.util.List;

/**
 * 0119-楊輝三角II
 * 給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。
 * <p>
 * 在楊輝三角中,每個數是它左上方和右上方的數的和。
 * <p>
 * 示例:
 * <p>
 * 輸入: 3
 * 輸出: [1,3,3,1]
 * <p>
 * 進階:
 * <p>
 * 你可以優化你的演算法到 O(k) 空間複雜度嗎?
 */
/** * 題目要求使用 O(K)的空間複雜度,所以只能建立一個集合。我們知道第 i 行的第 j 個 數的值, 是 * i-1 行當中j-1 和 j 值的和。由於只有一個集合,所以需要不斷的覆蓋,所以第 j 個數的值等於前一個 * 值加上當前值的和。因為集合中的值是不斷覆蓋,所以獲取到的前一個值並不是我們想要的(因為上次迴圈把 * 覆蓋了) * * 解決方法: * - 建立一箇中間變數記錄前一個值 * - 逆序構造每一行 */ class Solution { public List<Integer> getRow(int rowIndex) { List<
Integer>
list = new ArrayList<>(); list.add(1); for (int i = 0; i < rowIndex; i++) { for (int j = i; j >= 1; j--) { list.set(j, list.get(j - 1) + list.get(j)); } list.add(1); } return list; } } /** * 測試 */
public class Study0119 { public static void main(String[] args) { System.out.println(new Solution().getRow(3)); } }

結果:

在這裡插入圖片描述