LeetCode 第66题,加一
Posted hanlongfeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
分析
运行时间过长
改进
重新整理思路:
一共分为三种情况:
①.数组中最后一位不是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
收获总结
push_back是编程语言里面的一个函数名。如c++中的vector头文件里面就有这个push_back函数,在vector类中作用为在vector尾部加入一个数据。
以上是关于LeetCode 第66题,加一的主要内容,如果未能解决你的问题,请参考以下文章