今天按照刷题计划刷了一道类似于高精加的题
用了栈的方法写了一下。
66. 加一
(1)题目描述
题目链接如下:66. 加一https://leetcode.cn/problems/plus-one/description/
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0] 输出:[1]
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
做题分析:
用自己的话解释题意:
给一个数组,里面的数字代表了一个数字,我们对其+1,将答案用数组表示出来。
开始思考解决方法:
其实今天的题无论是题意还是思考来说都是比较简单的一道题
但最近学的栈知识比较多
就尝试用高精加的思想
再加上栈的操作
写出来了这道题。
大概是这样完成的:
首先把给的数组的末位加一
从后向前,依次对每个数字进行处理:
主要包括%10的取余操作,以及/10的记录进位操作。
然后把每个处理好的数字存储到栈里
搞完之后我们可以发现,从栈顶开始弹出元素
便是我们的ans答案数组。
代码如下:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
vector<int>ans;
stack<int>a;
int len=digits.size(),up=0;
digits[len-1]+=1;
for(int i=len-1;i>=0;i--){
digits[i]+=up;
a.push(digits[i]%10);
up=digits[i]/10;
}
if(up)a.push(up);
while(!a.empty()){
ans.push_back(a.top());
a.pop();
}
return ans;
}
};
二、总结及计划
题目虽然有点水,
但今天尝试了新的做法
并且一次就过了
嘿嘿很不错。