【LeetCode】9. Palindrome Number

Difficulty: Easy

 More:【目录】LeetCode Java实现

Description

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true

Example 2:

Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:

Coud you solve it without converting the integer to a string?

Intuition

遇到数字的题目一定要考虑到正负数和0,以及溢出的情况。

思路一:最开始想到的思路,翻转数字,与原来的数字比较,相等即可。对于溢出的情况,翻转后的数字和原来数字也不会相等,不会有影响。但是对于非Java语言的话,这种方法可能不行。

思路二:还是翻转数字,但是只翻转一半,这翻转的一半与剩下的一半进行比较,例如:123321,后半部分翻转为123,与前半部分123相等即OK。这里要特别注意的是:奇数情况以及个位数为0的情况。例如:12321,123210

思路三:获取最高位和最低位的数字,从两边数字向中间比较。

Solution

	//思路一:翻转数字(非Java语言可能不行)
	public boolean isPalindrome1(int x) {
	        if(x<0)	return false;
			int m=x;
			int n=0;
			while(m!=0) {
				n=n*10+m%10;
				m/=10;
			}
			return n==x;
	}
	 
	 
	//思路二:翻转一半
    public boolean isPalindrome2(int x) {
        if(x<0)	return false;
        if(x!=0 && x%10==0) return false;   //防止个位数为0时误判为true。例如10
        int n=0;
		while(x>n) {
			n=n*10+x%10;
			x/=10;
		}
		return n==x || x==n/10;
    }
    
    //思路三:最高位和最低位数字比较
    public boolean isPalindrome3(int x) {
        if(x<0)	return false;
		int div=1;
		while(x/div>=10)
			div*=10;
		while(x!=0) {
			if((x%10)!=(x/div))	return false;
			x=(x%div)/10;
			div/=100;
		}
		return true;
    }

  

What I've learned

1. 遇到回文要想到:

  A.翻转后相等;

  B.前后对应位置相等;

  C.翻转一半后相等,但是要注意到奇偶数和个位为0的情况。

2.和数字有关时,要注意:正负零,越界。

3.掌握好如何获取数字最高位的方法。

 

 More:【目录】LeetCode Java实现

 

posted @ 2018-12-23 19:13  华仔要长胖  阅读(206)  评论(0编辑  收藏  举报