【问题标题】:How to reverse a number more efficiently with Java如何使用 Java 更有效地反转数字
【发布时间】:2015-03-09 17:32:21
【问题描述】:

我写了一些代码来反转一个数字,如下所示:

        long num = 123456789;

        char[] arr = String.valueOf(num).toCharArray();
        List<Character> characterList = new ArrayList<Character>();
        for (char c : arr) {
            characterList.add(c);
        }
        Collections.reverse(characterList);

        for (Character c : characterList) {
            System.out.println(c);
        }

输出:

9
8
7
6
5
4
3
2
1

谁能给我一个更有效的方法来用 Java 实现这一点?

编辑
其实这个问题的第一个指南是把它​​们倒过来打印出来,这种方式请忽略。

【问题讨论】:

  • 为什么希望它更高效?你如何使用它?您是否有性能测试表明它太慢了?如果不是,请不要优化它。
  • 好吧,你为什么不从 char[] arr 向后打印它们?
  • 您为什么要提高效率?您可以使用标准的 for 循环并向后循环 char 数组;使用预先分配了 char 数组大小的数组列表(如果需要列表)。否则如果只是为了打印:while(num != 0) { println(num % 10); num /= 10; }

标签: java


【解决方案1】:

为什么要使用字符?您可以直接使用整数运算:

public static void main(String[] args) {
    long num = 123456789;

    while (num != 0) {
        System.out.println(num % 10);
        num = num / 10;
    }
}

输出:

9
8
7
6
5
4
3
2
1

这和 Long.toString() does internally 差不多,所以它应该比使用字符串更有效。

【讨论】:

  • 太棒了,我想这正是我所需要的:D
【解决方案2】:

您只能使用一个循环:

long num = 123456789;

char[] arr = String.valueOf(num).toCharArray();
for(int i = arr.length - 1; i >= 0; i--) {
    System.out.println(arr[i]);
}

【讨论】:

  • 感谢您的回答,其实这个问题的第一个指南是把它​​们倒过来打印出来,肯定还有其他更有效的方法,请忽略这个。
【解决方案3】:

如果“更高效”是指更少的行,你可以使用:

char[] reversed = new StringBuilder(String.valueOf(num))
                             .reverse().toString().toCharArray();

【讨论】:

  • 感谢您的回答,但“更高效”意味着计算更快:)
【解决方案4】:

最简单的方法:

long num = 123456789;

StringBuilder sb=new StringBuilder(num+"");

System.out.println(""+sb.reverse());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    相关资源
    最近更新 更多