Last Updated: 2023-09-30 07:42:40 Saturday
-- TOC --
终于熬到了第2道easy的题目。
Given an integer x, return true if x is a palindrome , and false otherwise.
输入一个int,判断此int是否为回文,返回true or false。
Example 1:
Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.
Example 2:
Input: x = -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: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Constraints:
简单分析一下,负数可以直接返回false,只需要对正数进行进一步的分析。根据LeetCode第5题,最长回文子串的经验,palindrome的长度可以是奇数,也可以是偶数。
int类型不太好处理,转str后再判断。
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
x_str = str(x)
for i in range(len(x_str)//2):
if x_str[i] != x_str[-i-1]:
return False
return True
class Solution {
public:
bool isPalindrome(int x) noexcept{
if(x < 0)
return false;
string xstr {to_string(x)};
size_t j {xstr.size()-1};
for(size_t i{}; i<xstr.size()/2; ++i)
if(xstr[i] != xstr[j-i])
return false;
return true;
}
};
bool isPalindrome(int x){
if(x < 0)
return false;
char xstr[11] = {};
sprintf(xstr, "%d", x);
size_t j = strlen(xstr) - 1;
for(size_t i=0; i<strlen(xstr)/2; ++i)
if(xstr[i] != xstr[j-i])
return false;
return true;
}
一个palindrome的int反转后,必须与它自己相等。
bool isPalindrome(int x){
if(x < 0)
return 0;
long r = 0, n = x;
while(n != 0){
r = r*10 + n%10;
n /= 10;
}
return x==r ? 1 : 0;
}
返回类型为bool的函数接口,也可以返回0或1。看汇编就发现,此时任何非0的数字,都是被编译成1返回。
这是更激进的做法:
bool isPalindrome(int x){
if(x < 0)
return 0;
if((x%10==0) && (x!=0))
return 0;
int y = 0;
while(x > y){
y = y*10 + x%10;
x /= 10;
}
return y==x ? 1 : y/10==x ? 1 : 0;
}
当非0正数的个位数为0的时候,可以直接返回。
本文链接:https://cs.pynote.net/ag/leetcode/202212171/
-- EOF --
-- MORE --