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();
    }
};

  

 

posted on 2018-12-11 21:03  _杰轩  阅读(154)  评论(0编辑  收藏  举报

导航