Java 题解 | #牛的回文编号II#
牛的回文编号II
https://www.nowcoder.com/practice/0b576fd673834425878b99c736bb6c34
import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param x string字符串
     * @return bool布尔型
     */
    public boolean isPalindromeNumber (String x) {
        // write code here
        // 去除前导0和后导0,保留小数点两边的数字
        String[] parts = x.split("\\.");
        String left = parts[0];
        String right = parts[1];
        // 判断左右两边是否是回文数
        return isPalindrome(removeLeadingZeros(left)) &&
               isPalindrome(removeTrailingZeros(right));
    }
    public boolean isPalindrome(String s) {
        int start = 0;
        int end = s.length() - 1;
        while (start < end) {
            if (s.charAt(start) != s.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
    public String removeLeadingZeros(String s) {
        int i = 0;
        while (i < s.length() && s.charAt(i) == '0') {
            i++;
        }
        return s.substring(i);
    }
    public String removeTrailingZeros(String s) {
        int i = s.length() - 1;
        while (i >= 0 && s.charAt(i) == '0') {
            i--;
        }
        return s.substring(0, i + 1);
    }
}
Java代码
该题是一个判断回文数的问题。回文数是指正序和倒序都相同的数字。
将输入的字符串按照小数点分隔成两部分,分别赋值给left和right。
调用removeLeadingZeros函数去除左边部分的前导零,并调用removeTrailingZeros函数去除右边部分的后导零。
isPalindrome函数分别判断左右两部分是否是回文数。如果两部分都是回文数,则返回true;否则返回false。
isPalindrome函数通过双指针法来判断字符串是否是回文数。从字符串的两端开始,逐个比较字符,如果不相等则返回false,直到指针相遇或交叉,则说明字符串是回文数,返回true。
removeLeadingZeros函数用于去除字符串左边的前导零。通过检查字符是否为0,找到第一个非零字符的位置,然后返回从该位置开始到字符串末尾的子串。
removeTrailingZeros函数用于去除字符串右边的后导零。通过检查字符是否为0,找到最后一个非零字符的位置,然后返回从字符串开头到该位置+1的子串。
