题目:
给定一个表示 大整数 的整数数组
digits
,其中digits[i]
是整数的第i
位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导0
。将大整数加 1,并返回结果的数字数组。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。 加 1 后得到 123 + 1 = 124。 因此,结果应该是 [1,2,4]。
示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。 加 1 后得到 4321 + 1 = 4322。 因此,结果应该是 [4,3,2,2]。
示例 3:
输入:digits = [9] 输出:[1,0] 解释:输入数组表示数字 9。 加 1 得到了 9 + 1 = 10。 因此,结果应该是 [1,0]。
题目来源:
https://leetcode.cn/problems/plus-one/description/?envType=study-plan-v2&envId=programming-skills
思路分析:
自己写的 没通过。后面看的题解。方法很厉害 来学习一下。
num+=digits[i]*(pow(10,n-i-1)); //我是这句话没通过
代码实现:
这个是自己写的:
cpp
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n=sizeof(digits);
int num=0;
for(int i=0;i<n;i++){
num+=digits[i]*(pow(10,n-i-1));
}
num=num+1;
//数组转换成数组
if(num/pow(10,n)==0){//说明没有进位
for(int i=0;i<n;i++){
digits[n-1-i]=num%10;
num=num/10;
}
}
else{
for(int i=0;i<n+1;i++){//发生进位
digits[n-i]=num%10;
num=num/10;
}
}
return digits;
}
};
这个是借鉴别人的:
cpp
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
for(int i=digits.size()-1; i>=0; i--)
{
digits[i]++;
if(digits[i] == 10) digits[i] = 0;
else return digits;
}
digits.insert(digits.begin(), 1);
return digits;
}
};
作者:无邪
链接:https://leetcode.cn/problems/plus-one/solutions/367391/si-lu-chao-ji-jian-dan-gong-da-jia-can-kao-by-wuxi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目心得:
- 数组中 insert(place,n)函数的使用; //将数组中指定的place处的元素+n
- 例子 digits.insert(digits.begin(), 1);