LeetCode 第66题,加一

题目概述

  • 题目:力扣:66.加一
  • 难易:简单
  • 内容:

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

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

    你可以假设除了整数 0 之外,这个整数不会以零开头。

    示例 1:

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

    示例 2:

    输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/plus-one

第一次思路

使用while循环将数组变为一个整数,然后计算的num有几位数,再倒着循环,将整数变为数组。

Code

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
       int num=0;
       int i=0;
       int a;
       for(int i(0);i<digits.size();i++){
           num=num*10+digits[i];
       } 
       num++;
       while(num/10!=0){
        i++;
       }
       do{
          a= num%10;
          digits[i]=a;
          i--;
          num=num/10;
       }while(i==0);    
       return digits;
    }
};

测试 Submit

LeetCode 第66题,加一

分析

运行时间过长

改进

重新整理思路:
一共分为三种情况:
①.数组中最后一位不是9 ,加一后不会进位,如:[1,2,3],加一后仍然是三位
②.数组中最后有9,但第一位不是9,加一后仍然不会改变数组的元素数,如[1,9,9,9]
③.数组中全书9,加一后会增加一个元素,如[9,9,9]
解决方式:
①.来时只要倒序循环找到9就变为0,直到最后一个连续的9为止,在前一位元素加一即可
②.最后一种情况要把第一个元素变为0,最后一位加上一个0;

改进Code

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int i=digits.size()-1;
       for(i;i>=0;i--){
           if(digits[i]==9)
                digits[i]=0;
            else {
                digits[i]++;
                break;
            };                          
       }
       if(digits[0]==0)
       {
            digits[0]=1;
            digits.push_back(0);             
       }
       return digits;
    }
};

改进Submit

LeetCode 第66题,加一

收获总结

push_back是编程语言里面的一个函数名。如c++中的vector头文件里面就有这个push_back函数,在vector类中作用为在vector尾部加入一个数据。

上一篇:66 网络编程(五)——TCP多线程实现多人聊天室


下一篇:项目总结66:真实项目Springboot继承kafka集群