广州专业网站可免费投放广告的平台
LeetCode66——加一
题目描述:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123
输入:digits = [1,9]
输出:[2,0]
解释:输入数组表示数字 19
输入:digits = [8 ,9,9, 9]
输出:[9 ,0,0 ,0]
解释:输入数组表示数字 8999
输入:digits = [9 ,9,9, 9]
输出:[1,0 ,0,0 ,0]
解释:输入数组表示数字 9999
思路:
1.末尾没有9——直接末尾元素加一即可加一
2.末尾有9——逆序找第一个不为9的元素并且将其加一 ,后面都变成0
3.全是9——新建个长度为原来数组长度+1的新数组{1,0,0,0,0…}即可
4.模拟实现数字进位
Result01
public static int[] addOne(int[] arr){//初始i指向数组最后一个元素 逆序找第一个不为9的数字for (int i = arr.length - 1; i >= 0; i--) {if (arr[i] != 9) {//找到了不为9的元素 加一即可arr[i]++;//加一之后 后面全部置为0for (int j = i + 1; j < arr.length; j++) {arr[j] = 0;}return arr;}}//执行到这的时候说明未执行if (arr[i] != 9) return arr,证明数组中的元素全都是9// arr 中所有的元素均为 9 加一之后 新创建一个数组返回即可int[] ans = new int[arr.length + 1];ans[0] = 1;return ans;}
运行结果;
Result02
public static int[] addOne(int[] arr) {//模拟现实数字进位的机制for (int i = arr.length - 1; i >= 0; i--) {arr[i]++;//这一步对 10 取模 因为数组中每个元素只存储单个数字 所以只有9+1 模 10 ==0 其余的数字加一之后模10 都还是其本身arr[i] = arr[i] % 10;//如果进位之后模10不等于0 证明其是小于9的数 直接返回数组if (arr[i] != 0){return arr;}}//运行到这里的时候 说明进位后全为0 ,即原来数组的元素全是9 ,所以要新建数组arr = new int[arr.length + 1];arr[0] = 1;return arr;}