Lintcode 407
这道题也是Lintcode娘随机给我挑的一道题目。
已知:
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照大小进行排列,最大的数在列表的最前面。
示例:
给定 [1,2,3] 表示 123, 返回 [1,2,4].
给定 [9,9,9] 表示 999, 返回 [1,0,0,0].
思路:
题意还是比较清晰的。
思路的话,就是模拟我们自身思考的过程:
当一个数加1,如果结果为10,则当前位为0,且下一次循环上的数字依旧要加1。
如果结果为10以下,则结果就是计算的结果,且之后再无进位。
代码如下:
public class Solution {
public int[] plusOne(int[] digits) {
List<Integer> ret = new ArrayList<Integer>();
//要加1的时候令flag为true,默认初始数字最后一位也要+1,所以默认true
boolean flag = true;
for (int i = digits.length - 1; i >= 0; i--) {
if (flag) {
digits[i]++;
}
//运算结果为10,则向前进位,进入下一次循环,否则再也不进位
if (digits[i] == 10) {
ret.add(0);
flag = true;
} else {
ret.add(digits[i]);
flag = false;
}
}
//最后一次进位,在这里,123我们存的形式势3->2->1
if (ret.get(ret.size() - 1) == 0) {
ret.add(1);
}
int[] result = new int[ret.size()];
for (int i = 0; i < ret.size(); i++) {
result[i] = ret.get(ret.size() - 1 - i);
}
return result;
}
}
心累,卖不动萌了,┓(;´_`)┏,看官随意,如果有好的意见欢迎交流