app导航网站源码白帽seo是什么
package sim;import java.math.BigDecimal;
import java.util.Arrays;public class Add1 {/*给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]*/public static void main(String[] args) {int[] nums= {9,8,7,6,5,4,3,2,1,0};int[] nums1=plusOne1(nums);System.out.println(Arrays.toString(nums1));}public static int[] plusOne1(int[] digits) {//[9,8,7,6,5,4,3,2,1,0]//将该数组所有元素变成一个整数String str="";for(int i=0;i<digits.length;i++) {str+=digits[i];}//str=123BigDecimal nums=new BigDecimal(str);BigDecimal one=new BigDecimal(1);nums=nums.add(one);//加1 ---->9876543211String arr=String.valueOf(nums);//987654321//算出应除的位数BigDecimal yz=new BigDecimal(10);for(int j=0;j<arr.length()-1;j++) {one=one.multiply(yz);//1000000000}//求每一位挨个往数组中存放int[] res=new int[str.length()];for(int i=0;i<digits.length;i++) { //BigDecimal的divideAndRemainder方法求余,返回的是一个数组(商,余数)BigDecimal[] b=nums.divideAndRemainder(one);//dig[0]=1,res[i]=b[0].intValue();//商即为每位数字nums=b[1];//余数作为接下来的商one=one.divide(yz);//除数改变(少一位即除10)}return res;}
}
这里将字符串转成int类型时,不要直接用int接收,因为可能会存在超出int范围(-2147483648~2147483647),可以采用BigDecimal来接收,就不会报“Exception in thread "main" java.lang.NumberFormatException: For input string: "98765432101"
at java.lang.NumberFormatException.forInputString(Unknown Source)”这个错误了。
以上是我的解题思路,还有别的其他思路,欢迎诸君共同探讨。