算法-加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
来源:力扣(LeetCode)
思路一:
class Solution {
public int[] plusOne(int[] digits) {
String cache ="";
String sb = "";
for(int i =0;i<digits.length;i++){
sb= sb + digits[i];
}
long before = Long.parseLong(sb);
long after = before + 1;
String result=String.valueOf(after);
int[] list = new int[result.length()];
for(int i=0; i<result.length();i++){
list[i] = Integer.parseInt(String.valueOf(result.charAt(i)));
}
return list;
}
}
该方法思路就是将数组转成字符串后,再转成数字,将数字加一后再转成字符串,获取长度后创建空数组, 将字符串各个位转换成数字填入。
但是该方法存在的问题是,如果输入的数组过长,在转换为数字的时候会出现溢出问题。
思路二:
class Solution {
public int[] plusOne(int[] digits) {
for(int i = digits.length-1; i>=0; i--){
digits[i]++;
digits[i] = digits[i]%10;
if(digits[i]!=0){
return digits;
}
}
digits = new int[digits.length+1];
digits[0] = 1;
return digits;
}
}
该方法适用于任何数组(首位不为0),通过从右向左进行处理,主要考虑三种情况:
- 123(普通情况);
- 199(需要进位);
- 999(不仅进位,数组长度也要改变)。
笔记
声明数组时必须声明数组长度,以下是常用声明数组方法:
String[] aArray = new String[5];
String[] bArray = {"a","b","c", "d", "e"};
String[] cArray = new String[]{"a","b","c","d","e"};