LeetCode 学习
1、整数反转
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
思路:把最后的一位提取出来,放到新的容器前面,反复进行上面的操作,同时也要判断是否会导致溢出
1 class Solution {
2 public:
3 int reverse(int x)
4 {
5 int rev = 0;
6 while (x != 0)
7 {
8 int pop = x % 10; //提取最后一位
9 x /= 10; //去掉最后一位
10 if (rev > INT_MAX / 10 && (rev = INT_MAX / 10 && pop > 7)) return 0;
11 if (rev < INT_MIN / 10 && (rev = INT_MIN / 10 && pop < -8)) return 0;
12 rev = rev * 10 + pop;
13 }
14 return rev;
15 }
16 };
2、回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
思路:首先判断数的正负,然后考虑最后一位为0的数,运用反转的原理,将数进行反转和之前的数对比
class Solution {
public:
bool isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0))
{
return false;
}
int result=0;
while(x>result)
{
result=result*10+x%10;
x /=10;
}
return x == result || x == result/10;
}
};
3、从排序数组中删除重复项
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
思路:使用迭代器的方法,依次比较前后两个数,相同则删除
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==NULL)
return 0;
vector<int>::iterator i=nums.begin();
vector<int>::iterator j=i+1;
while(i<nums.end())
{
while(j<nums.end()&&*j==*i)
{
j=nums.erase(j);
continue;
}
i++;
j++;
}
return nums.size();
}
};