判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
c语言:
bool isPalindrome(int x) {
int a =0,b = 0,y = x;
if(x < 0)
return false;
while(y!= 0)
{
a = y%10;
y = y/10;
b = b*10 +a;
}
if(x == b)
return true;
else
return false;
}
感觉写的没啥技术含量啊,如果为负数,就直接返回false,不然就是利用了整数的反转,然后和原数进行比较,菜哇
改进一波:
没有必要将整数完全的反转,只反转一半就好,例如1551,将后面的51进行反转,为15,然后和原数的前两位进行比较就ok
bool isPalindrome(int x) {
int a =0,b = 0;
if((x < 0) ||((x % 10 == 0) && (x != 0)))
return false;
while(x > b)
{
b = b*10 + x%10;
x = x/10;
}
if((x == b)|| (x == b/10))
return true;
else
return false;
}
将整数只反转一半的思想:将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于反转后的数字时,就意味着我们已经处理了一半位数的数字。在最后判断的时候,如果是偶数,就是原始数字和反转后的数字是一样的,如果是奇数,反转后的数字就多一位,不过没关系,直接除掉就行。
然后按照惯例,python的来一波吧^_^
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0 :
return false
return str(x) == str(x)[::-1]
这里用了字符串,反正感觉py是真的耗费时间和空间了 但是超简单了,喵喵喵~
这个是新写的,觉得很不错哇,首先,先把错误的案例直接排除掉,然后对整数进行翻转,和上面第二个代码的思路一模一样,优秀啊
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0 :
return False
if x%10 ==0 and x != 0 :
return False
y = 0
while x>y:
y = y*10 + x%10
x = x//10
if x==y or x == y//10:
return True
return False