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