以下代码计算得到的值为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 <= 10^9表示m可以保持10^9的值。 你能列出你的技术优化吗? – Hulk