NO.66 加一

  1. 链接
    https://leetcode.cn/problems/plus-one/
  2. 题目
    给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
    最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
    你可以假设除了整数 0 之外,这个整数不会以零开头。

示例
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

  1. 思路

    1. 第一种,暴力解题。把数组翻转后,通过模拟数字加法来得出结果,该方法的内存消耗大,繁琐;
    2. 第二种,分析法。因为数字只是加一,所以根据分析题目可知,能够有进位的就是“9”,并且进位只会是1,进位后的数字只会是0,且其余情况下末尾+1不会为0。并且,如果循环结束,没有return。那么就是[9,9,…,9]所以加一后的值为[1,0,0,…,0]。
  2. 代码

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        //my,翻转法
        // reverse(digits.begin(),digits.end());
        // int carry,tmp;
        // carry=(digits[0]+1)/10;
        // digits[0]=(digits[0]+1)%10;
        // for(int i=1;i<digits.size();i++){
        //     tmp=digits[i]+carry;
        //     digits[i]=tmp%10;
        //     carry=tmp/10;
        //     // if(!carry)
        //     // break;
        //     //上面两个语句是对耗时和内存的优化
        //     //针对特别大的数字,在中途进位为0了,所以可以退出,不用全部循环一遍
        // }
        // if(carry)
        // digits.push_back(carry);
        // reverse(digits.begin(),digits.end());
        // return digits;


        //官方
        int len=digits.size();
        for(int i=len-1;i>=0;i--){
            digits[i]=(digits[i]+1)%10;
            if(digits[i]!=0)
            return digits;
        }
        //循环结束,没有return的情况
        vector<int> ans(len+1);
        ans[0]=1;
        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值