boxmoe_header_banner_img

Hello! 欢迎来到QwQのblog!

加载中

文章导读

力扣66题:加一


avatar
qwq 2026年3月24日 172

先看一下题目,算是很简单的题目。

66. 加一

给定一个表示 大整数 的整数数组 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]。

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits 不包含任何前导 0

这道题目本来是打算用vectorstringstream的(当时是没有注意数据范围)

#include<bits/stdc++.h>

using namespace std;

class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
// 1. 将 digits 转为字符串
string numStr = "";
for (int d : digits) {
numStr += to_string(d);
}

stringstream ss(numStr);
unsigned long long num;
ss >> num;

// 3. 加 1
num += 1;

// 4. 转回字符串
string resultStr = to_string(num);

// 5. 转为 vector<int>
vector<int> result;
for (char c : resultStr) {
result.push_back(c - '0');
}

return result;
}
};


这个想法就是利用stringstream输入到num,然后加一再转回字符串并且转回数组。

但凡多看一眼数据范围都不会犯这个错

1 <= digits.length <= 100

后面就转变思路改成模拟加法,碰9进1,循环如此,直到没有碰到

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n = digits.size();
for (int i = n - 1; i >= 0; i--) {
digits[i] += 1;
digits[i] %= 10;
if (digits[i] != 0) { // 无进位
return digits;
}
}
// 所有位都是9,需要添加一位1
digits.insert(digits.begin(), 1);
return digits;
}
};

后面也是成功通过。

未经许可,禁止转载



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字