LeetCode C++算法题持续跟新

第一部分 简单算法题

  1. 整数反转
    题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
    解题思路:通过对x数据求余数,将最后一位数字输出到第一位,难点在于考虑数字溢出情况。
    代码:

    class Solution {
    public:
        int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                int pop = x % 10;
                x /= 10;
                if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
                if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
                rev = rev * 10 + pop;
                
            }
            return rev;
        }
    };
    
  2. 两数之和
    题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
    代码:

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            vector<int> result;
            for(int i = 0;i < nums.size();i++)
            {
                for(int j = i + 1;j < nums.size();j++)
                {
                    if(nums[i] + nums[j] == target)
                    {
                        result.push_back(i);
                        result.push_back(j);
                    }
                }
            }
            return result;
        }
    };
    
  3. 删除排序数组中的重复项
    题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
    解题思路:使用快慢指针。

    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            int i = 0;
            if(nums.size()==0)return 0;
            for (int j = 1; j < nums.size(); j++) {
                if (nums[j] != nums[i]) {
                    i++;
                    nums[i] = nums[j];
                }           
            }
        return i+1;
        }
    };
    
  4. 加一
    题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
    代码:

    class Solution {
    public:
        vector<int> plusOne(vector<int>& digits) {
            int len=digits.size();
            for(int i=len-1;i>=0;i--)
            {
                if(digits[i]!=9)
                {
                    digits[i]++;
                    return digits;
                }else
                {
                    digits[i]=0;
                    continue;
                }
            }
            digits.insert(digits.begin(),1);
            return digits;
        }
    };
    

第二部分 中等算法题

  1. 整数反转
    题目: 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。
    解题思路:先对矩阵进行转置,然后水平翻转。
    class Solution {
    public:
        void rotate(vector<vector<int>>& matrix) {
            int n=matrix.size();
            for (int i = 0; i < n; i++) 
            {
                for (int j = i; j < n; j++)
                 {
                    int tmp = matrix[j][i];
                    matrix[j][i] = matrix[i][j];
                    matrix[i][j] = tmp;
                }
            }
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n/2;j++)
                {
                    int tmp=matrix[i][j];
                    matrix[i][j]=matrix[i][n-j-1];
                    matrix[i][n-j-1]=tmp;
                }
            }
    
        }
        
    };
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章