java - 在java中求一个数字的累加和时,我们应该使用字符串还是列表来存储数字?

标签 java string performance list

求数字的累加和时,我们应该使用字符串还是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/

相关文章:

java - 如何使用正则表达式或其他方式删除java字符串中多余的 '\r\n'

javascript - Python String.startswith() 与 Javascript 中的字符串列表

sql-server - 在 View 中使用调用 GETDATE() 的函数是否始终比直接使用 GETDATE() 提供更差的性能?

php - 当今关于可扩展的高性能 PHP 应用程序的最佳方法

java - do while 循环在我不希望它循环时循环

java - MySQL 自定义主键生成器

java - 从 JPEG 数据到完整的 JPEG 文件

java - 在状态机之间传输对象

python - 打印 0-999999 的号码名称

python - 人们如何有效地处理重复的事件检查(python/pygame)?