求数字的累加和时,我们应该使用字符串还是Arraylist来存储数字?
我所做的代码在这里,我想知道是否有更有效的方法来做到这一点?
private static int cumulative_sum(int num) {
int count = 0;
for (int k = 1; k <= num; k++) {
String number = k + "";
for (int i = 0; i < number.length(); i++) {
count = count + Integer.parseInt(number.charAt(i) + "");
}
}
return count;
}
最佳答案
似乎您想要将 1 到 num
之间的所有数字的数字相加。即使对于简单的算法来说,使用字符串也是不必要的,而且效率很低。您可以依次除以 10:
private static int cumulative_sum(int num) {
int count = 0;
for (int k = 1; k <= num; k++) {
int number = k;
while(number > 0) {
count+=number % 10;
number/=10;
}
}
return count;
}
在内部,当您创建String
时,它会执行类似的操作,但也会为每个新的String
对象(以及内部char[]
)分配内存> 数组也是如此)。此外,您还为每个字符创建新的 String
对象,并将其与空的 String
连接起来,这也不是很快。因此,对于较大的 num 值,您在分配/释放内存时可能会产生相当大的开销。相反,我的版本根本不创建或使用堆对象。我的简单基准测试表明,对于 num = 1000000
,我的版本快了 14 倍(13 毫秒 vs 196 毫秒)。
请注意,有更有效的算法可以对从 1 到 num
的所有数字的所有数字进行求和。请参阅A037123了解详情。
关于java - 在java中求一个数字的累加和时,我们应该使用字符串还是列表来存储数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665372/