(菜鸟算法分享)LeetCode--初级算法--加一问题(C++描述)

折月煮酒 提交于 2019-12-24 04:40:54

(菜鸟算法分享)LeetCode–初级算法–加一问题(C++描述)

BY Ray


给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 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-作者:马大欧

  • 写在最后(唯唯诺诺):

    做的时候就没有参考别的代码,自己想出来的一种解法,本人是一名初入算法坑的菜鸟大学生,这是鄙人第一次写文章,目的是想记录一下自己的学习过程并和大家分享一下思路,请各位大神轻喷。欢迎大家提出意见或者积极分享更多的想法!谢谢大家!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!