标签:red you code sig dig 数组 integer 观察 while
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
1.善用/ %,用c记录,踏踏实实做就好。问一下能不能直接改原数组,不能的话就再开个list辅助也行。
2.观察规律,最后大一格的话只可能发生在输入全是9的情况,而且加后的结果就是新位1后面全是0。所以你可以直接先假设不是极端情况一直加上去,如果遇到不是9的时候就可以直接把改后的原数组返回了。如果最后还是没有返回的话就说明遇到极端情况,直接开一个新的长一点的第一个位改1即可。
1.基础版模拟法实现
class Solution { public int[] plusOne(int[] digits) { List<Integer> list = new ArrayList<>(); int[] result; int idx = digits.length - 1; int c = 1; while (idx >= 0) { int digit = digits[idx] + c; list.add(digit % 10); c = digit / 10; idx--; } result = new int[digits.length + c]; int start = c; result[0] = c; for (int i = start; i < result.length; i++) { result[i] = list.get(list.size() - (i - start) - 1); } return result; } }
2.观察规律实现
public int[] plusOne(int[] digits) { int n = digits.length; for(int i=n-1; i>=0; i--) { if(digits[i] < 9) { digits[i]++; return digits; } digits[i] = 0; } int[] newNumber = new int [n+1]; newNumber[0] = 1; return newNumber; }
标签:red you code sig dig 数组 integer 观察 while
原文地址:http://www.cnblogs.com/jasminemzy/p/7965843.html