066J. Plus One
https://leetcode.com/problems/plus-one/
方法1
优点是可以处理非加1的情况。缺点是代码比较啰嗦。 原理是从后往前处理,即从个位起处理。 原则就是在判断是否需要进位。
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
digits[n-1]+=1;
int carry = 0;
for(int i = n - 1; i >= 0; i--){
if( digits[i] + carry > 9){
digits[i] = 0;
carry = 1;
}else{
digits[i]+=carry;
carry = 0;
return digits;
}
}
int[] newN = new int[n+1];
newN[0] = 1;
return newN;
}
}
Method2
这个方法代码优雅一些。
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
for(int i = n-1; i>=0;i--){
//先判断是否小于9,如果小于9。就无进位的考虑。
if(digits[i] < 9){
digits[i]++;
return digits;
}
// 如果需要进位,就把这一位设为0;下一个循环再考虑是否需要进位
digits[i] = 0;
}
int[] newNumber = new int[n+1];
newNumber[0] = 1;
return newNumber;
}
}
Last updated
Was this helpful?