小米杨辉三角内存超限,求解

 static long fun(long x) {


int[][] a = new int[(int) (x+1)][];

for(int i = 0 ; i < x+1 ; i++){
a[i] = new int[i+1];
for(int j = 0 ; j < a[i].length ; j++){
a[i][j] = 1;
}
}

for(int i = 1 ; i < x+1 ; i++){
for(int j = 1 ; j < a[i].length-1 ; j++){
a[i][j] = a[i-1][j-1] + a[i-1][j];
if(a[i][j] == x){
//System.out.println("   "+(i+1));
return i+1;
}
}
}

return x;

}
#小米#
全部评论
内存肯定超了呀,比如x=10^9.
点赞
送花
回复
分享
发布于 2017-09-18 21:16
x为long型变量超内存,我当时就固定了个数组大小10000就AC了,求大佬给出更好的解决方案。
点赞
送花
回复
分享
发布于 2017-09-18 21:19
秋招专场
校招火热招聘中
官网直投
难道你不知道可以线性推c(n,i)嘛
点赞
送花
回复
分享
发布于 2017-09-18 21:23
你可以每次只生成一行。。。
点赞
送花
回复
分享
发布于 2017-09-18 21:29
滚动数组就好了,只需要两行
点赞
送花
回复
分享
发布于 2017-09-18 21:30
ArrayList<Integer> line = new ArrayList<Integer>(); while (true) {     line.add(0, 1);     for (int i = 1; i < row - 1; i++) {         line.set(i, line.get(i) + line.get(i + 1));     } }
点赞
送花
回复
分享
发布于 2017-09-18 21:31
点赞
送花
回复
分享
发布于 2017-09-18 21:46
图为第 100 行的数据,x 可能是一个比较大的数,强转感觉会出问题啊。。。
点赞
送花
回复
分享
发布于 2017-09-18 21:48
import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Main { /*请完成下面这个函数,实现题目要求的功能 当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ ******************************开始写代码******************************/ static long fun(long x) { int height = 1; List<Long> list = new ArrayList<>(); list.add(1L); while(true) { if(list.contains(x)) break; else { height++; List<Long> tmp = new ArrayList<>(); tmp.add(1L); for(int i=0;i<list.size()-1;++i) { long sum = list.get(i)+list.get(i+1); tmp.add(sum); } tmp.add(1L); list = tmp; // System.out.println(Arrays.toString(list.toArray())); } } return height; } /******************************结束写代码******************************/ public static void main(String[] args){ Scanner in = new Scanner(System.in); long res; long _x; _x = Long.parseLong(in.nextLine().trim()); res = fun(_x); System.out.println(String.valueOf(res)); } }
点赞
送花
回复
分享
发布于 2017-09-18 22:22

相关推荐

ps:最寄的一集
投递拼多多等公司10个岗位 >
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务