杨辉三角形(JAVA)
题目:
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?
输入描述
输入一个整数 N。
输出描述
输出一个整数代表答案。
输入输出样例
示例 1
输入
6
输出
13
评测用例规模与约定
对于 20% 的评测用例,1≤N≤10; 对于所有评测用例,1≤N≤1000000000。
运行限制
最大运行时间:1s
最大运行内存: 256M
思路:
首先我想到的是将杨辉三角形构建出来再进行查找,但N的最大值是1*10^9,经过亲身实践只能通过40%的用例
所以需要找规律
杨辉三角形:
需要考虑的部分:
其中6=c(2,4) 2=c(1,2)因为10^9>c(16,32)但10^9<c(17,34),所以在16列以内肯定能找到所有的数,有效数列是0-16列。又因为每一行都是从左到右递增,每一列都是从上到下递增,每个数字都可以表示为c(i,j)。所以我们可以从十六列开始,逐步往前找采用二分行的方式找到答案。
代码:
import java.util.Scanner; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大数据科技协会-zky!