LeetCode 20191126

1.加一
我认为思路是对的
但是反向出了问题 我的做法是用栈来反向 但是有问题
不说了 配代码

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
       vector<int>res0={1};
       if(digits.size()==0) {
        return res0;
       }
       int value;
       for(int i=0;i<digits.size();i++){
           value=10*value+digits[i];
       }
        int value_plus=value+1;
        vector<int> res;
        stack<int>inverse;
        while(value_plus>0){
            int num=value_plus%10;
            value_plus=value_plus/10;
            res.push_back(num);
        }
        for(int i=0;i<res.size();i++){
            inverse.push(res[i]);
        }
        vector<int>result;
        while(!inverse.empty()){
            result.push_back(inverse.top());
            inverse.pop();
        }
        return res;
    }
};

2.合并两个有序数组

这道题方法是 从末尾 最大的地方开始排序
从末位开始判断大小
一旦大就放进去 谁大放谁
这个比较要进行就要两个数都存在
所以一旦一方不存在 就直接把剩下那个数组挨个放进去 (从后往前放)就可以咯

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i=m-1;
        int j=n-1;
        int k=m+n-1;
        while(i>=0&& j>=0){
            if(nums1[i]<nums2[j]){
                nums1[k]=nums2[j];
                j--;
                k--;
            }
            else{
                nums1[k]=nums1[i];
                i--;
                k--;
            }
        }
        while(i>=0){
            nums1[k]=nums1[i];
            i--;
            k--;
        }
        while(j>=0){
            nums1[k]=nums2[j];
            j--;
            k--;
        }
    }
};
发布了44 篇原创文章 · 获赞 9 · 访问量 3349

猜你喜欢

转载自blog.csdn.net/puying1/article/details/103259700