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;
                }
            }
    
        }
        
    };
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章