(菜鸟算法分享)LeetCode–初级算法–加一问题(C++描述)
BY Ray
- 题目描述
先附上原题链接:LeetCode–初级算法–加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
- 算法描述代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len=digits.size();
for(int i=len-1;i>=0;i--)//从最后一个元素开始遍历数组
{
if(digits[i]==9)//遇到数字9,置0
{
digits[i]=0;
if(i==0)//若第一个元素也是9,则添加一个0并将首位置1,退出循环
{
digits.push_back(0);
digits[0]=1;
break;
}
}
else//若遇到数不为9,则加一退出循环。
{
digits[i]++;
break;
}
}
return digits;
}
};
执行用时:4ms
-
我的思路(重拳出击):
从最后一个元素向前遍历,就三种情况:
情况1:遇9置0(进位操作),遇第一个不是9的元素就+1并退出循环。
[1,2,9]====>[1,3,9]情况2:若全是9(也就是从最后一个到第一个元素都为9),遇9置0,在最后添加0元素并将第一个元素+1。
[9,9,9]====>[1,0,0,0]情况3(普通情况):若最后一个元素不为9,则直接最后一位元素+1
[1,2,3]====>[1,2,4]如果对C++ vector不熟悉的话推荐您阅读:C++基础之向量Vecto-作者:马大欧
-
写在最后(唯唯诺诺):
做的时候就没有参考别的代码,自己想出来的一种解法,本人是一名初入算法坑的菜鸟大学生,这是鄙人第一次写文章,目的是想记录一下自己的学习过程并和大家分享一下思路,请各位大神轻喷。欢迎大家提出意见或者积极分享更多的想法!谢谢大家!
来源:CSDN
作者:Ray_1999
链接:https://blog.csdn.net/weixin_42816477/article/details/103628827