记录LeetCode第二天(Reverse Integer & Palindrome Number.)
1.Reverse Integer题目
Given a 32-bit signed integer, reverse digits of an integer.
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
2. 例子
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
3. 代码
class Solution {
public:
int reverse(int x) {
long v=0; //反转后的值定义为长整形
while(x)
{
v=v*10+x%10;
x=x/10;
}
return (v<INT_MIN || v>INT_MAX) ? 0 : v;//判断是否越界
}
};
4. 超级简单但是依然强制有的4。
- 一开始没有注意到最后返回值的判断,还有反转后v的值会有可能越界,要设置成长整形。最然判断过是否越界,但是总感觉返回值是int类型但是其实里面是long有点可怕。。。
INT_MAX
和INT_MIN
原来也没有怎么用到过。- 每次一用
? :
就感觉很厉害哈哈哈。
5. 题目 Palindrome Number
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
6. 例子
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.
7. 和上面一样的代码不想写注释
class Solution {
public:
bool isPalindrome(int x) {
int n = x;
long v = 0;
while(n>0)
{
v = v * 10 + n%10;
n = n/10;
}
return (v==x)? true : false;
}
};
还看到一个思路,只比较一半,数字大的话会快点叭,但是一开始写有些情况会可能考虑不到,比如10,100 这种,加上条件以后又发现 0其实满足条件还要再排除。
class Solution {
public:
bool isPalindrome(int x) {
long v = 0;
if(x%10==0 && x!=0 ) return false;
while(x>v && x>0)
{
v = v*10 + x%10;
x = x/10;
}
return (v==x)||(x==v/10);
}
};