No.009:Palindrome Number

时间:2022-03-10 19:11:14

问题:

Determine whether an integer is a palindrome. Do this without extra space.

官方难度:

Easy

翻译:

不使用额外空间,判断一个数是不是回文形式。

  1. 暂定负数不参与讨论。
  2. 先获取数值长度,取得对应位置的数字比较。
  3. 重点是如何取到一个整数指定位置的数字,通过(x/Math.pow(10,n-1))%10来实现。
  4. 循环至一半就可以退出。

解题代码:

 public static boolean isPalindrome(int x) {
// 负数不在讨论范围内
if (x < 0) {
return false;
}
int length = String.valueOf(x).length();
// 低位/高位
int low;
int high;
// 循环至一半就可以退出
for (int i = 1; i < length / 2 + 1; i++) {
// low+high=length+1
low = getNFromLow(i, x);
high = getNFromLow(length + 1 - i, x);
if (!(low == high)) {
return false;
}
}
return true;
} // 获取数字x,自低位起的第n个数
private static int getNFromLow(int n, int x) {
return (int) ((x / Math.pow(10, n - 1)) % 10);
}

isPalindrome

相关链接:

https://leetcode.com/problems/palindrome-number/

https://github.com/Gerrard-Feng/LeetCode/blob/master/LeetCode/src/com/gerrard/algorithm/easy/Q009.java

PS:如有不正确或提高效率的方法,欢迎留言,谢谢!