leetcode笔记:Plus One

来源:互联网 发布:软件开发网上兼职 编辑:程序博客网 时间:2024/06/03 21:39

一.题目描述

Given a number represented as an array of digits, plus one to the number.

二.题目分析

一道高精度计算的题,从低位到高位进行计算,同时考虑进位的问题,若最高位计算结果还有进位,就需要在最高位前面添加一位。可做到时间复杂度为O(n),空间复杂度为O(1)。

这道题应该算是简化版,因为要求只是对一个数加1,如果任何一位的运算没有进位,则更高位也不需要进行进位处理了,可以直接输出结果。

三.实例代码

#include <iostream>#include <vector>using namespace std;class Solution {public:    void plusOne(vector<int>& digits)    {        int carry = 1;        const int digitsSize = digits.size();        for (int i = digitsSize - 1; i >= 0; i--)        {            digits[i] += carry;            if (digits[i] < 10)            {                carry = 0;                break;            }            carry = digits[i] / 10;            digits[i] %= 10;        }        if (carry != 0) // 若最高位运算仍有进位,则需新增一位并置1            digits.insert(digits.begin(), carry);    }};

两个运行结果:

这里写图片描述

这里写图片描述

四.小结

又是一道涉及位运算的题目,解决方法有多种,而且应该考虑plus不同的值时,又该怎么处理。

3 0