当前位置: 首页 > 知识库问答 >
问题:

我在leetcode的回文问题上使用了这个,它仍然表示10的输出是正确的

孟福
2023-03-14

leetcode上的问题是:给定一个整数x,如果x是回文整数,则返回true。

当一个整数向后读取和向前读取相同的内容时,它就是一个回文。例如,121是回文,而123不是。

这是我的代码。

class Solution {
    public boolean isPalindrome(int x) {
        if (x <= 9) { 
            //negative numbers are not palindromes
            if (x < 0)  {
               return false;
            } 
        }
        else {
            return true;
        }
        //if anything is divisible by 10 with no remainders its not a palindrome
        if (x % 10 ==0) {
            return false;
        }
            
        //creating reverse method
        int reverse = 0;
    
        while(x > reverse) {
             int num = x % 10;
             x /= 10;
             reverse = (reverse * 10) + num;
        }
        if (x == reverse || x == reverse / 10) {
             return true;
        }
        else {
            return false;
        }
    }
}

我很确定我的逻辑是正确的,但我在NetBeans上测试时没有发现错误,得到的结果是121是正确的,但10是正确的,因为它不是回文,所以应该是错误的?我很困惑,希望能得到一些帮助,更好地理解逻辑。

共有2个答案

刘阳舒
2023-03-14

问题在于第一次检查——对于任何大于9的数字,都会返回true。

这个:

        if (x <= 9) { 
            //negative numbers are not palindromes
            if (x < 0)  {
               return false;
            } 
        }
        else {
            return true;
        }

应该是这样的:

        if (x <= 9) { 
            //negative numbers are not palindromes
            if (x < 0)  {
               return false;
            } 
            else {
              return true;
            }
        }

即使这样也太冗长了。编写相同逻辑的更简单方法是

        if (x <= 9) { 
            //negative numbers are not palindromes, but positive single digit numbers are
            return x >= 0;
        }
厍晋鹏
2023-03-14

你可以通过以下方式实现同样的目标:

  1. 将数字分解为数字。您可以使用ArrayList
import java.util.ArrayList;

public class Main {
    public static boolean palindrome(int number)
    {
        if (number < 0)
            number *= -1; // Or return false if you want to exclude negative numbers
        
        // 1. Decompose the number into digits
        ArrayList<Integer> digits = new ArrayList<Integer>();
        while (number > 0) {
            digits.add(number % 10);
            number /= 10;
        }
        
        // 2. Check
        for (int i = 0, j = digits.size()-1; i < j; i++, j--) {
            if (digits.get(i) != digits.get(j))
                return false;
        }
        
        return true;
    }
    
    public static void main(String[] args)
    {
        System.out.println(palindrome(121));
        System.out.println(palindrome(123));
        System.out.println(palindrome(10));
    }
}

输出:

true
false
false
 类似资料:
  • 我正在尝试解决数组旋转的程序。我在代码中遇到分段错误。有人能告诉我这个代码中的问题在哪里吗? 这就是问题所在 给定一个大小为N的未排序数组arr[],将其旋转D元素(顺时针)。 输入的第一行包含T表示测试用例的数量。每个测试用例的第一行包含两个空格分隔的元素,N表示数组的大小,整数D表示旋转的数字大小。随后的行将是N个空格分隔的数组元素。 我已经用下面的代码解决了它。

  • 我的石头、布、剪刀游戏出错了: 代码:

  • 我想用一个2D数组找到方差和标准差,我做了程序,但输出是不正确的。请帮助我,我应该做什么/修改它,以获得请求输出。 输入 3 4 1 0 1 1 1 1 1 1 1 1 1 解决方案输出 0.07513148009038192 0.27410122234383033 预期产出 0.0764 0.2764 我的程序:

  • 问题内容: 我正在阅读 Java平台性能 (很遗憾,自从我最初提出这个问题以来,链接似乎已经从互联网上消失了),而A.3.3节使我感到担忧。 我一直在假设一个超出范围的变量将不再被视为GC的根,但是本文似乎与此矛盾。 最近的JVM(尤其是Sun的1.6.0_07版本)是否仍然有此限制?如果是这样,那么我有很多代码需要分析… 我问这个问题是因为该论文来自1999年-有时情况会发生变化,尤其是在GC领

  • 问题内容: 我读这个和这个,结果发现,在课堂上我需要保存到类的引用,当东西在发生类,我们执行由类的接口中定义的方法工具。好吧,我明白了。我以不同的方式使用接口来调用回调: 我发现这种方式更具可读性,更容易理解,但是不确定这是否是不好的做法。因此,我可以随意走这条路吗? 问题答案: 所以我可以随意走这条路吗? 这种方式不是很正确。 您在说的是称为Observer或/ 模式。 简而言之:订户想要从发布

  • 我读了这篇文章和这篇文章,发现在类中,我需要保存对类的引用,当类中发生一些事情时,我们执行一个由类实现的接口定义的方法。不知何故我明白了。我以不同的方式使用接口来调用回调: 我发现这种方式更易读,更容易理解,但不确定这是否是一个不好的做法。所以我可以自由地走得更远吗?