杨辉三角
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 N,请你输出数列中第一次出现 N是在第几个数?
输入一个整数 N。
输出一个整数代表答案。
示例:输入6,输出13
对于 20% 的评测用例,1≤N≤10; 对于所有评测用例,1≤N≤1000000000
最大运行时间:1s
最大运行内存: 256M
误区:一开始拿到这题,我打算用二维数组存储一个杨辉三角,后来发现测试用例数据规模很大,达到了10^9。这种时候就已经需要用long long来存储数据了。
解法描述:
3、由于每行每列对应的值都是递增的,所以如果我们想覆盖住最大的数据,也就是1e9,那么就要找到一个i,使得C2i i(组合数,懒得拍照)>1e9就可以了。
于是我们找到了这个i,便是16。这代表我们只要搜索0~32行的左半部分就可以了。
4、下面就是查找部分,因为递增的关系,要从最右边的行数查找。同时为了节省时间,运用二分查找。
杨辉三角
在探索了多项式平方之后,如:(a+b)²,我想进一步探索(a+b)³...看有什么规律,其实这就是我之前听说过的杨辉三角,我准备提前探索一下杨辉三角的规律。
如何才能探索杨辉三角规律?直接找肯定找不出来,我准备先从具体的计算中,找找规律。先计算一下(a+b)²,如图:
我可以利用乘法分配律得到结果,但是只有这一个算式,看不出什么规律,至少要找三组才可以。于是我准备继续计算(a+b)³和(a+b)的四次方,如图:
观察上面几组算式结果,有什么规律?我准备分别从每一个式子的系数,项数,和次数入手。首先,我要观察项数,可以分别把他们的项数写出来:也就是3、4、5。我仔细观察这几个数字有什么关系?我突然发现每一项的项数和次数有关系,项数是次数+1,可以用代数来表示一下:项数为(n+1)。那么每一项的系数又有什么规律?我们同样可以把每一项的系数相加罗列出来,4、8、16,这有什么规律?首先我发现他和次数之间有规律,次数是多少,它的系数就是2的N次方, 如果次数是3,系数就是2的三次方,我们可以用代数式表示这个规律:系数为2的n次方。并且我还发现一个规律,(a+b)²的系数分别是1、2、1。(a+b)³的系数分别是1、3、3、1。(a+b)四次方系数分别是1、4、6、4、1。把它们组合在一起排列下去,其实就是这样,如图:
我发现上面的两个数相加,其实就等于下面的数,每一个式子的系数都可以对应这个图,我们也可以利用这个图找到一个任意次方式子的系数是多少。那么每一项的次数有什么规律?我可以把他们的次数相加找找规律,我同样分别罗列他们的次数,6、12、20。我发现一个规律,每一个式子化简完的每一项的次数都是原式的次数,所以我们就可以得到次数之合为次数乘项数,可以用代数式表示:次数为n(n+1)。最后我们可以再总结一下每一个式子项数、系数、次数的规律,如图:
但是现在我只找到了每个式子次数,系数和项数的规律,还不能将任意次方的式子拆分,需要找到具体拆分的方法,我们可以先找到一个式子,得出结果,来找规律,比如(a+b)的八次方。如图:
我计算得到结果,这个结果与原式之间有什么关系?这个式子的系数就是刚才我们所找到的规律,可以利用图表将它的系数写出来。所以我们在遇到任意一个式子的时候,都可以先将系数写出来,但是后面的字母和次数,又有什么规律?我仔细观察,可以先从字母a入手,观察每一项a的次数,我突然发现了一个规律,a的次数从开始往后依次递减1,最开始的次数就是整个式子的系数,每往后一项次数依次-1,直到变为零。接下来我又观察b的次数,我发现b的次数是从零开始依次往后加1,直到加到整个式子的次数。现在我们可以确定系数,又得到了次数的变化规律,遇到任意一个次方的式子,就可以利用同样的方法将它拆分。但现在,我又遇到了一个问题,如果是(a+b)的n次方该怎么办?它的系数是多少?如果系数不确定,就无法进行拆分,我想尽各种方法,但最终也没有解决,感觉现在已有的认知以及所掌握的东西,都无法解决这个问题,看来只能等到以后再慢慢解决了。
看起来几个不同的式子,但他们之间却有着巨大的联系,在探索了杨辉三角的规律之后,一部分有关次方的式子我也可以将它拆分,但是如果次方是未知数,我现在就无法得到结果,但是在以后掌握更多知识后,我就可以将它解决。