Plus One(加一)
1.Description
Given a non-empty array of digits representing a non-negative integer, increment one to the integer.
The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit.
You may assume the integer does not contain any leading zero, except the number 0 itself.
2.Example
Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
3.Solution
思考过程
一开始没太看懂题,当成类似字符串替换空格写的后来发现并不是;后来才想到是用进位,分两种情况判断,一种是不全是9的,在从尾到头for循环时遇到9的话将这一位变成0,并用while一直向前判断是不是9直到遇到不是9的数,并加一;第二种是全是9的,需要重新申请更大的数组。
自己写的太麻烦:
class Solution {
public int[] plusOne(int[] digits) {
int n =1;
for(int i=0;i<digits.length;++i){
if(digits[i]!=9){
n = 0;//判断是不是全是9
}
}
if(n==0){
if(digits[digits.length-1]==9){
for(int i=digits.length-1;i>=1;i--){
if(digits[i]==9){
digits[i] = 0;
while(digits[i-1] == 9){
i--;
digits[i] = 0;
}
digits[i-1]++;
return digits;
}
}
}else{
digits[digits.length-1]++;
}
return digits;
}else{
int[] nums = new int[digits.length+1];
nums[0] = 1;
return nums;
}
}
}
放答案:
class Solution {
public int[] plusOne(int[] digits) {
for(int i=digits.length-1;i>=0;i--){
if(digits[i]!=9){
digits[i]++;//进位,所以加一
return digits;
}
digits[i] = 0;
}
//当退出循环时说明数组中都是9,因此重新申请更大的数组空间
int[] nums = new int[digits.length+1];
nums[0] = 1;
return nums;
}
}