[LeetCode] Palindrome Number
题目链接:https://oj.leetcode.com/problems/palindrome-number/
问题:Determine whether an integer is a palindrome. Do this without extra space.
针对本题可能存在的疑惑
1)负数是否属于回文(例如-1)?
暂定负数不为回文。
解题思路:
方法一:
1)将输入数字表示成字符串
缺点:违法不能运用额外条件的限制
1 public boolean isPalindrome(int x){ 2 if(x < 0){ 3 return false; 4 } 5 String num = String.valueOf(x); 6 int i = 0; 7 int j = num.length() - 1; 8 while(i < j){ 9 if(num.charAt(i) != num.charAt(j)){ 10 return false; 11 }; 12 i++; 13 j--; 14 } 15 return true; 16 }
时间复杂度:O(N),空间复杂度:O(N)
方法二:
1)将输入数字逆转
2)将 逆转后的数字与原数字进行对比,是否相同
缺点:若反转后的数字发生溢出将发生错误
1 public boolean isPalindrome(int x){ 2 if(x < 0){ 3 return false; 4 } 5 int reverse = reverse(x); 6 if(reverse == x){ 7 return true; 8 } 9 return false; 10 } 11 12 private int reverse(int num){ 13 int result = 0; 14 while(num != 0){ 15 result = result * 10 + num % 10; 16 num /= 10; 17 } 18 return result; 19 }
时间复杂度:O(N),空间复杂度:O(1)
方法三:
从最头和最尾开始,依此向中间进行比较:
若比较的两个数不同,返回false
若比较的两个数相同,去除头尾数字,继续比较
1 public boolean isPalindrome(int x){ 2 if(x < 0){ 3 return false; 4 } 5 int div = 1; 6 while(x / div >= 10){ 7 div *= 10; 8 } 9 while(x!=0){ 10 int l = x / div; 11 int r = x % 10; 12 if(l != r){ 13 return false; 14 } 15 x = (x % div) / 10; 16 div /= 100; 17 } 18 return true; 19 }
时间复杂度:O(N),空间复杂度:O(1)

浙公网安备 33010602011771号