- 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
- str+=digits[i];
- }//str=123
- BigDecimal nums=new BigDecimal(str);
- BigDecimal one=new BigDecimal(1);
- nums=nums.add(one);//加1 ---->9876543211
- String arr=String.valueOf(nums);//987654321
- //算出应除的位数
- BigDecimal yz=new BigDecimal(10);
- for(int j=0;j
1;j++) { - one=one.multiply(yz);//1000000000
- }
- //求每一位挨个往数组中存放
- int[] res=new int[str.length()];
- for(int i=0;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)”这个错误了。
以上是我的解题思路,还有别的其他思路,欢迎诸君共同探讨。
-
相关阅读:
给一个input元素添加border-radius 但是加完之后 边框变得很粗怎么办
RPA前景、要求和学习方向
IDEA小技巧:Markdown里的命令行可以直接运行了
【3D建模实战】维京海盗盾牌教程
实体机安装centos7问题总结
深浅拷贝小整理(对象赋值请注意)
C语言中的常量、变量及关键字
MyBatis 插件机制详解
LitePal在Kotlin中使用的一个小问题
java毕业设计电子产品专卖电商系统Mybatis+系统+数据库+调试部署
-
原文地址:https://blog.csdn.net/weixin_62226624/article/details/132775238