博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetCode 加一 问题记录
阅读量:5261 次
发布时间:2019-06-14

本文共 1940 字,大约阅读时间需要 6 分钟。

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。

 

自己的做法

String arrayStr = Arrays.toString(digits);        arrayStr = arrayStr.replaceAll("[\\[\\],\\s]","");//        String arrayStr = StringUtils.join(Arrays.asList(digits),"");        BigInteger num = new BigInteger(arrayStr);        num = num.add(BigInteger.ONE);        int[] resultArray = new int[num.toString().length()];        char[] charArray = num.toString().toCharArray();        for (int i = 0;i

结果说BigInteger不让用,因为输入数组可能是无限大的  基础的int long都不能满足要求。后来只好改成下面这种

Boolean addFlag = true; int[] result = new int[digits.length+1]; for (int i = digits.length-1;i>=0;i--){
Integer num = digits[i]; if (addFlag){
if (num >= 9){
num++; num = num%10; }else {
num++; addFlag = false; } }else {
addFlag = false; } result[i+1] = num; } if (addFlag){
result[0] = 1; return result; }else {
return Arrays.copyOfRange(result,1,result.length); }
 

思路就是新建一个比原数组长一个单位的数组,从尾部开始办理数组的每一位判断是否需要进1,并进行加1,放到新数组的i+1的位置,最后判断原数组第一位是否需要进1 如果需要则为新数组第一位设置为1,并返回。如果不需要则截取从第一位开始的整个数组返回。

 

leetcode上的最优解示例

class Solution {    public int[] plusOne(int[] digits) {        int carry = 1;        for(int i=digits.length-1; i>=0; i--) {            if(carry==0) {                return digits;            }            int tmp = digits[i] + carry;            carry = tmp / 10;            digits[i] = tmp % 10;        }        if(carry!=0) {            int[] res = new int[digits.length+1];            res[0] = 1;            return res;        }        return digits;    }}

原理跟我的思路差不多,区别在于我是用单独一个标志来存储是否需要进1,num是通过++来加值。最优解通过一个int的变量既能当做进1的标志也能参与计算出+1后的temp。

 

转载于:https://www.cnblogs.com/beliveli/p/9016614.html

你可能感兴趣的文章
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>