杨辉三角的主要性质:
-
每个数等于它上方两数之和。
-
每行数字左右对称,由1开始逐渐变大。
-
第n行的数字有n项。
-
前n行共[(1+n)n]/2 个数。
-
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
注意虽然其中的每个数都可以用组合数C(n-1,m-1)表示,但是由于组合数公式需要用到阶乘,而阶乘25以上就会超过long长整型的上限,所以通过组合数直接求某个值或某行的值只能是n小于等于25。否则就必须通过迭代相加实现。
假如只用 O(N)的空间复杂度求杨辉三角的某行,需要用到滚动数组的方法。
先创建一个长度为n+1,所有位置都为1的数组。
i=2,nums[1]=nums[1]+num[0] 1,2,1,1.....
i=3,num[2]=nums[2]+num[1],nums[1]=nums[1]+num[0] 1,3,3,1,1,1...
i=4...
注意,是从后往前迭代,因为num[i]=nums[i]+num[i-1],如果顺序反过来,后面迭代的会受到前面的影响,i=3.就会是1,3,4,1。