【发布时间】:2016-02-01 18:17:32
【问题描述】:
下面的代码计算一个值,该值是str 中每个数字的平方和。这个总和再次计算m 次。
Example: m = 2, str="123"
At m=1 (1^2)+(2^2)+(3^2) = 1+4+9 = 14
At m=2 (1^2)+(4^2) = 1+16 = 17
所以 17 应该是这个输入的最终答案。对于大型输入或针对上述 1000 个测试用例运行时,此代码会给出超出时间限制的错误。这段代码可以进一步优化吗?
Test case will be less than 1001
1 <= str.length(), m <= 10^9
public static void puzzle(int m,String str) {
int ans = 0;
while (m > 0) {
ans=0;
m--;
int j = 0;
while (j < str.length()) {
int val = Integer.parseInt(str.charAt(j) + "");
ans += val* val;
j++;
}
str = String.valueOf(ans);
}
System.out.println(ans);
}
我已经尽力了我的水平,并且可以提出上述迭代解决方案。即使使用递归解决方案也无法改进。
递归代码:
public static int solve(int m, String n){
if(m < 1)
return Integer.parseInt(n);
int idx = 0;
int res = 0;
while(idx< n.length()){
int val = Integer.parseInt(n.charAt(idx) + "");
res += val*val;
idx++;
}
return solve(m-1,String.valueOf(res));
}
【问题讨论】:
-
最初的最大数量是多少?您确定结果将保留在 32 位
int中吗?因为在这种情况下技术优化的空间很大,如果没有,那么你的解决方案就是错误的。我的怀疑来自您的评论M <= 10^9...这是什么意思?? -
更新了代码。 m
标签: java math optimization time-complexity puzzle