leetcode [Plus One]
2017-03-11 21:54
274 查看
public class Solution { public int[] plusOne(int[] digits) { int temp[] = new int[digits.length + 1]; int[] res = null; int carry = 0; if(digits[digits.length - 1] != 9){ digits[digits.length - 1] += 1; return digits; } else{ carry = (digits[digits.length - 1] + 1) / 10;//先处理要加的末位的1 temp[digits.length] = (digits[digits.length - 1] + 1) % 10; for(int i = digits.length - 2; i >= 0; i--){ //carry = (digits[i] + carry) / 10;//不是每一位都加1 temp[i + 1] = (digits[i] + carry) % 10; carry = (digits[i] + carry) / 10;//不是每一位都加1 注意放的位置,如果放在前面carry的值已经被改变了 } if(carry != 0){ temp[0] = carry; res = temp; } else{ res = new int[digits.length]; for(int i = 0; i < temp.length - 1; i++){ res[i] = temp[i + 1]; } } } return res; } }
代码简洁,对于末尾为9的速度会慢一些(相同思路):
class Solution {
public int[] plusOne(int[] digits) {
int temp[] = new int[digits.length + 1];
int[] res = null;
int carry = 0;
/*if(digits[digits.length - 1] != 9){
digits[digits.length - 1] += 1;
return digits;
}*/
//注释部分其实在下面也有体现,重复了,但有了注释部分对于末尾为9的速度会快很多
carry = (digits[digits.length - 1] + 1) / 10;//先处理要加的末位的1
temp[digits.length] = (digits[digits.length - 1] + 1) % 10;
for(int i = digits.length - 2; i >= 0; i--){
//carry = (digits[i] + carry) / 10;//不是每一位都加1
temp[i + 1] = (digits[i] + carry) % 10;
carry = (digits[i] + carry) / 10;//不是每一位都加1 注意放的位置,如果放在前面carry的值已经被改变了
}
if(carry != 0){
temp[0] = carry;
res = temp;
}
else{
res = new int[digits.length];
for(int i = 0; i < temp.length - 1; i++){
res[i] = temp[i + 1];
}
}
return res;
}
}
最优解:
class Solution {
public int[] plusOne(int[] digits) {
//由于本题只加了一个一位数1,所以不用去找carry来每一位往上加,只用观察每一位即可
//其实是一种思路,但是代码优化了许多
int n = digits.length;
for(int i = n - 1; i >= 0; i--) {
if(digits[i] < 9) {
digits[i]++;
return digits;//发现有一位不为9把该位加1后就行,由于没有进位,高位也不用变了,直接返回
}
else digits[i] = 0;//某一位为9则要将该位变为0,而且在上面那个if中不只是判断末位是否为9(代替了carry的作用)
}
//此时已经运行到了for循环外,说明在for循环内没有return,则最高位有进位
int[] newNumber = new int [n+1];
newNumber[0] = 1;
return newNumber;
}
}
相关文章推荐
- LeetCode 第 66 题 (Plus One)
- 字符串可以按位获得和列表生成式-【leetcode66-plus one】
- [LeetCode] Plus One
- [leetcode]46 Plus One
- LeetCode-Plus One
- LeetCode题解——Plus One
- Plus One -- leetcode
- 【LeetCode】66. Plus One
- Leetcode 66. Plus One (Easy) (cpp)
- leetCode:Plus One
- [LeetCode][Java] Plus One
- leetCode 66.Plus One (+1问题) 解题思路和方法
- 【leetcode刷题笔记】Plus One
- LeetCode -- 66. Plus One
- LeetCode066 Plus One
- leetcode:Plus One
- LeetCode Plus One 66
- 个人记录-LeetCode 66. Plus One
- LeetCode 66. Plus One
- Leetcode_c++:Plus one(066)