Java&LeetCode 初入门——119. 杨辉三角 II
Java&LeetCode 初入门——119. 杨辉三角 II
文内代码全部采用JAVA语言。
题目
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。
测试用例
输入: 3 输出: [1,3,3,1]
个人解法
119题基本和118题一样,甚至比118题还要简单一点。唯一的区别在于,两题对行数的理解不同,这里的行数是从0开始计算的,第0行就是[1],而118题的第0行是[]。将118稍微修改一下即可。
执行用时: 2 ms, 在Pascal’s Triangle II的Java提交中击败了67.25% 的用户
class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> row1=new ArrayList<Integer>(); row1.add(1); if (rowIndex==0) { return row1; } for (int i = 1; i <=rowIndex; i++) { Iterator<Integer> it=row1.iterator(); int a=0; List<Integer> row2=new ArrayList<Integer>(); while (it.hasNext()) { int b=it.next(); row2.add(a+b); a=b; } row2.add(1); row1=row2; } return row1; } }
大神解法
思路
杨辉三角值的直接求解,第n行第m个数的值,就是C(n,m-1),即为从n个不同元素中取m-1个元素的组合数。这里大神直接用(s = (rowIndex - j+1) * s / j))一行就实现了迭代求组合数,真是佩服。组合数公式如下:
比如,要求第五行。第一个数直接为1,C(5,0)=5。
C(5,1)=n!m!(n−m)!=5!0!(5−0)!=5×4×3×2×11×(5×4×3×2×1)=1
C(5,1) =\frac{n!}{m!(n-m)!} =\frac{5!}{0!(5-0)!} =\frac{5\times4\times3\times2\times1}{1\times(5\times4\times3\times2\times1)}=1
C(5,1)=m!(n−m)!n!=0!(5−0)!5!=1×(5×4×3×2×1)5×4×3×2×1=1
第二个数为C(5,1)=5,直接等于行数。
C(5,1)=n!m!(n−m)!=5!1!(5−1)!=5×4×3×2×11×(4×3×2×1)=5=C(5,0)×51
C(5,1) =\frac{n!}{m!(n-m)!} =\frac{5!}{1!(5-1)!} =\frac{5\times4\times3\times2\times1}{1\times(4\times3\times2\times1)}=5=C(5,0)\times\frac{5}{1}
C(5,1)=m!(n−m)!n!=1!(5−1)!5!=1×(4×3×2×1)5×4×3×2×1=5=C(5,0)×15
再看第三个数。C(5,2)
C(5,2)=5!2!(5−2)!=5×4×3×2×1(1×2)×(3×2×1)=10=C(5,1)×42
C(5,2) =\frac{5!}{2!(5-2)!} =\frac{5\times4\times3\times2\times1}{(1\times2)\times(3\times2\times1)}=10=C(5,1)\times\frac{4}{2}
C(5,2)=2!(5−2)!5!=(1×2)×(3×2×1)5×4×3×2×1=10=C(5,1)×24
…
以下不一一列举。
可以发现后一个数就是在前一个数的基础上,除以 位置序号-1,再乘上(行数-位置序号+2)
算法
执行用时: 0 ms, 在Pascal’s Triangle II的Java提交中击败了100.00% 的用户。相当强了。
class Solution { public List<Integer> getRow(int rowIndex) { double s=1; List<Integer> list =new ArrayList<Integer>(); if(rowIndex>0)list.add(1); // 输出第一个 1 for (int j = 1; j <= rowIndex - 1; j++) list.add((int)(s = (rowIndex - j+1) * s / j)); list.add(1); return list; } }
- [LeetCode][119. Pascal's Triangle II][easy]Java实现,杨辉三角
- 【LeetCode-面试算法经典-Java实现】【119-Pascal's Triangle II(帕斯卡三角形(杨辉三角)II)】
- leetcode119. 杨辉三角 II
- Leetcode#119. Pascal's Triangle II(杨辉三角II)
- 【leetcode】119. Pascal's Triangle II【java】
- Leetcode:119. Pascal's Triangle II(JAVA)
- 【LeetCode】#119杨辉三角II(Pascal's Triangle II)
- 【LeetCode——JAVA实现】119. pascals-triangle-ii(帕斯卡三角形 II)
- LeetCode-119:Pascal's Triangle II (返回杨辉三角指定行)
- Leetcode 119. Pascal's Triangle II 杨辉三角2 解题报告
- [leetCode 118 & 119] Pascal's Triangle I && II (杨辉三角问题)
- 每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
- Java&LeetCode 初入门——122. 买卖股票的最佳时机 II
- LeetCode-118、119. Pascal's Triangle (JAVA)杨辉三角
- ※ Leetcode - Dynamic Programming - 119. Pascal's Triangle II(倒叙滚动数组求解杨辉三角第k行)
- [LeetCode] 119. Pascal's Triangle II 杨辉三角 II
- [LeetCode By Python]119. Pascal's Triangle II
- leetcode_137. Single Number II 只出现一次的数字 II 偏离了题目考点,主要是为了写下java
- Search in Rotated Sorted Array II leetcode java
- [Leetcode] Binary Tree Level Order Traversal II (Java)