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的子串。