[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)

 

posted @ 2016-08-18 14:28  沫沫_fun  阅读(119)  评论(0)    收藏  举报