✅ 119. 杨辉三角 II
https://leetcode-cn.com/problems/pascals-triangle-ii/
描述
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
解答
他人:
c/Java
/** * 获取杨辉三角的指定行 * 直接使用组合公式C(n,i) = n!/(i!*(n-i)!) * 则第(i+1)项是第i项的倍数=(n-i)/(i+1); */ public List<Integer> getRow(int rowIndex) { List<Integer> res = new ArrayList<>(rowIndex + 1); long cur = 1; for (int i = 0; i <= rowIndex; i++) { res.add((int) cur); cur = cur * (rowIndex-i)/(i+1); } return res; } --- int* getRow(int rowIndex, int* returnSize) { *returnSize = rowIndex + 1; int* num = (int*) malloc ((rowIndex + 1) * sizeof(int)); for(int i = 0;i <= rowIndex;i++) for(int j = i;j >= 0;j--) { if(j == 0 || j == i) num[j] = 1; else num[j] = num[j] + num[j-1]; } return num; } --- java beats 98% public List<Integer> getRow(int rowIndex) { Integer[] dp = new Integer[rowIndex + 1]; Arrays.fill(dp,1); for(int i = 2;i < dp.length;i++){ for(int j = i - 1;j > 0;j--) dp[j] = dp[j] + dp[j - 1]; } List<Integer> res = Arrays.asList(dp); return res; }` 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
py
class Solution: def getRow(self, rowIndex: int) -> List[int]: res = [] for i in range(1, rowIndex): tmp = [1] * i for j in range(1, i-1): tmp[j] = res[i-1][j-1] + res[i-1][j] res.append(tmp) return res[rowIndex-1] ''' 最后一行:红了: IndexError: list index out of range Line 9 in getRow (Solution.py) Line 34 in _driver (Solution.py) Line 45 in <module> (Solution.py) ''' ######fix: class Solution: def getRow(self, rowIndex: int) -> List[int]: res = [] for i in range(1, rowIndex+2): tmp = [1] * i for j in range(1, i-1): tmp[j] = res[i-2][j-1] + res[i-2][j] res.append(tmp) print(res) return res[rowIndex] ''' 执行用时 : 44 ms , 在所有 Python3 提交中击败了 28.65% 的用户 内存消耗 : 13.6 MB , 在所有 Python3 提交中击败了 5.16% 的用户 '''
来源:https://www.cnblogs.com/paulkg12/p/12561732.html