问题
给定一个数组,对数组最高位加一并返回。
思路
既然是对数组最高位加一,代表是对数组中最后一个元素加一即可。但是需要考虑一种特殊情况,如果最高位的值是9,则需要变为0,并进一位,且整个数组长度加一。
1)逆向遍历数组,第一个值就是数组中的最高位值,
2)判断该值是否为9,
3)如果不是9,则最高位加一,并返回数组即可。
4)如果是9,则先将该为置为0,并记录遍历该数组。
5)如果存在有9的情况,则新建一个数组,长度为原数组长度加一,并将数组首位置为1并返回新数组。
实现
/**
* 给定一个数组, 在末尾+1并输出
* 1,2,3 -》 1,2,4
* 9,9 -》 1,0,0
*/
public class PlusOne {
public static void main(String[] args) {
int[] nums = new int[]{9,9,9};
int[] result = plusOne(nums);
System.out.println(Arrays.toString(result));
}
/**
* 对数组从后往前遍历,
* 如果最后一位不是9, 则最后一位+1并返回数组
* 如果最后一位是9,则先将该位变为0,继续遍历。 最后新建一个数组,给定长度为原数组+1,并将新数组第一位设置为1并返回
* @param nums
* @return
*/
private static int[] plusOne(int[] nums) {
int length = nums.length;
for (int i=length-1;i>=0;i--){
if (nums[i] != 9){
nums[i]++;
return nums;
}else {
nums[i] =0;
}
}
//存在9
int[] newIntArray = new int[length+1];
newIntArray[0] = 1;
return newIntArray;
}
}