LeetCode 加一 [简单]
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one
题目分析:
解法1:
把数组 数据拿出来,然后拼接+1,然后再放回去,但是会有范围溢出。
解法2
从后向前遍历,如果不是9,就 自增,返回数组,如果是,则置零,继续for循环,循环结束之后还没有返回,那么就都是9,创建一个新的数组,长度+1,然后使得 temp[0] = 1;其他位置的值,默认是 0 ,则直接返回 temp 即可
代码实现
public class LeetCode_27_PlusOne {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
int[] res = SortCounterUtil.generateRandomArray(6, 9);
SortCounterUtil.printArray(res);
int[] temp = plusOne(res);
System.out.println();
SortCounterUtil.printArray(temp);
System.out.println();
System.out.println("------------------------------------------");
}
}
public static int[] plusOne(int[] digits) {
if (digits == null) {
return null;
}
if (digits.length == 0) {
return new int[]{1};
}
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] != 9) {
digits[i]++;
return digits;
}
digits[i] = 0;
}
int[] temp = new int[digits.length + 1];
temp[0] = 1;
return temp;
}
}
public class SortCounterUtil {
/**
* 生成随机 int 数组
*
* @param size 数组长度
* @param value 数组的值
* @return 返回生成的随机数组
*/
public static int[] generateRandomArray(int size, int value) {
int[] arr = new int[(int) ((size + 1) * Math.random())];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) ((value + 1) * Math.random() - (int) (value * Math.random()));
}
return arr;
}
/**
* 数组的拷贝
*
* @param arr 需要拷贝的数组
* @return 返回拷贝完成的数组
*/
public static int[] copyArray(int[] arr) {
if (arr == null) {
return null;
}
int[] arrRes = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
arrRes[i] = arr[i];
}
return arrRes;
}
/**
* 正确的排序方法 来自 JDK 的方法
*
* @param arr 需要排序的数组
*/
public static void rightMethod(int[] arr) {
Arrays.sort(arr);
}
/**
* 判断两个数组是否相等
*
* @param arr1 数组1
* @param arr2 数组2
* @return 返回是否相等
*/
public static boolean isEquals(int[] arr1, int[] arr2) {
if ((arr1 == null && arr2 != null) ||
(arr1 != null && arr2 == null)) {
return false;
}
if (arr1 == arr2) {
return true;
}
if (arr1.length != arr2.length) {
return false;
}
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
public static void printArray(int[] arr) {
if (arr == null) {
System.out.println("数组为空");
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.print("arr[" + i + "] = " + arr[i] + " ");
}
}
}
网友评论