力扣经典算法篇-45-回文数(数字处理:求余+整除,字符串处理:左右指针)
1、题干
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
2、解题
数字的处理通常有两种方式。
第一种求余法,结合数字除以10,可以从尾部逐个获取数字;
第二个转字符串,对转成的字符串可以逐个字符进行处理。
方法一:(Java工具方法)
直接通过字符串反转的方式进行字符串比较。这种方式在web项目开发中经常用到,但如果是考算法的话,不建议。
代码示例:
public static boolean isPalindrome(int x) {if (x < 0) {return false;}String s = String.valueOf(x);String reverse = StringUtils.reverse(s);return StringUtils.equals(s,reverse);
}
方法二:(转字符串+左右指针法)
将数字转字符串,结合左右指针法,依次取出最左和最右未校验的字符进行比较处理。
代码示例:
public static boolean isPalindrome(int x) {if (x < 0) {return false;}String s = String.valueOf(x);int start = 0;int end = s.length() - 1;while (start <= end) {char startC = s.charAt(start++);char endC = s.charAt(end--);if (startC != endC) {return false;}}return true;}
方法三:(数字处理:求余+整除)
通过求余+整除的方式,可以逐个取出末尾的数字,在反向乘10求和得出反转值。
代码示例:
public static boolean isPalindrome(int x) {if (x < 0) {return false;} else if (x==0){return true;} else if (x%10==0){return false;}int temp = x;int reverseSum =0;while (temp>0){reverseSum = reverseSum*10 + temp%10;temp = temp/10;}return x == reverseSum;}
向阳前行,Dare To Be!!!