https://leetcode.cn/problems/plus-one/
错误解法:
class Solution {
public:
std::vector<int> plusOne(std::vector<int>& digits) {
// 在 C++ 中 vector 获取元素个数应该使用 size() 函数
int len = digits.size();
long long sum = 0;
for (int i = 0; i < len; i++) {
sum += digits[i] * std::pow(10, len-i-1);
}
sum += 1;
int count = 0;
long long temp1 = sum;
while (temp1 != 0) {
temp1 /= 10;
count++;
}
// 从低位开始计算新的每一位数字
long long temp2 = sum;
std::vector<int> arr(count);
for (int i = count - 1; i >= 0; i--) {
arr[i] = temp2 % 10;
temp2 /= 10;
}
return arr;
}
};
上述代码对于部分样例无法通过,同时使用到了 long long
,占用空间较大,较为笨拙
下面的实现是ai提供的,主要是对于 vector
的操作不是很熟练
class Solution {
public:
std::vector<int> plusOne(std::vector<int>& digits) {
int len = digits.size();
// 直接在原数字上进行计算,从个位开始逐位处理
for (int i = len - 1; i >= 0; --i) {
if (digits[i] < 9) {
digits[i]++;
return digits;
}
digits[i] = 0;
}
// 如果所有数字都是 9,需要在前面添加一个 1
digits.insert(digits.begin(), 1);
return digits;
}
};
类似的代码如下:
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;
}
};