java - 如何优化我糟糕的代码以找到 3 位数字的最高回文数?

标签 java loops palindrome

这是我到目前为止写的。它编译,据我所知,它应该“工作”——如果你给你的电脑无限的时间来计算答案!

我只是想知道是否有人能给我一种优化方法,这样我的程序就会告诉我最高回文数(向前和向后都相同,例如 91 * 99 = 9009;)由将任意两个三位数相乘。

 public class HighestPalindrome {
     public static void main(String[] args) {
    int number=0;
    int answer=0;

    search:
    for(int LoopOfFirstNumber=999;LoopOfFirstNumber<=100;LoopOfFirstNumber -= 3){
      for(int LoopOfSecondNumber=LoopOfFirstNumber;LoopOfSecondNumber<=100;LoopOfSecondNumber-=3)
      {
        number = LoopOfFirstNumber * LoopOfSecondNumber;
        if (number == reverse(number))
         {
          answer=number;
          System.out.println(answer);
          break search;
         }
      }
    }
  }

     //The code after this works fine, I believe. It will reverse any number given very quickly, I think the problem
     //is above....with the two for loops!

    private static int reverse(int n, int r) {
      if (n == 0) return r;
      System.out.println("This iteration returns " + n/10 + " and  " + 10*r+n%10);
      return reverse(n/10, 10*r+n%10);
    }

    public static int reverse(int n) {
     return reverse(n, 0);
    }

最佳答案

正如您已经猜到的,问题出在嵌套循环中。尝试找出数字的一些属性。两个三位数的乘法总是会得到一个有五位或六位的数字。由于您正在寻找最高数字,因此它应该是从数字 9 开始的六位数字,并且由于它是回文,它可能也以数字 9 结尾。简而言之,您需要 9xyyx9 形式的数字。

接下来,并不是所有的数字对都可以相乘并以数字 9 结尾。xx3 和 xx3 将得到 xxxxx9,xx1 和 xx9 也是如此;但是 xx1 和 xx8 永远不会乘以 xxxxx9。

查找此类属性,并尝试过滤哪些可能可以轻松实现到您的搜索中。

关于java - 如何优化我糟糕的代码以找到 3 位数字的最高回文数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013676/

相关文章:

javascript - 在进入嵌套循环之前,我怎样才能 "complete"一个循环?

c - 将单词插入堆栈并检查其是否存在回文

java - 在 Windows 上使用 Eclipse/Subversive 重命名 Java 文件的最佳实践

python - for循环内递增变量

java - java API 的 Scala 包装器 API

ios - 暂停循环并等待UIAlertView交互

在c中通过递归检查回文

java - 尝试找到该输入的最长回文

java - 如何从android中的AsyncTask获取数据?

java - Pack200/Network Transfer Format Spec SourceDebugExtension 属性的格式规范