力扣初级算法每日打卡---加1

加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路:

Python
  • 把数组合成字符串,用int方法取得字符串的值并加一,最后再拆开,用map把 字符列表 转化为 整型列表 就行了。
  • 一开始想这不一句话解决吗?
  • 但是遇到输入[0, 0]的时候出错了,所以说还是要判断一下值是否为0的。
JAVA
  • 加法是从后向前的,所以说遍历digits也应该从后向前。
  • 应该有一个参数记录是否发生进位(carry)
  • 初始化返回数组(result)应该比digits数组多1位, 所以digits中的第i位,放在result中的话,应该是i+1
  • result的长度有两种情况,要么等于digits的长度,要么是digits数数组长度加1。

PS:第一次用时这么短,留个纪念hhh
在这里插入图片描述

代码

Python
def plusOne(digits):
    value = int("".join(map(str,digits)))
    if value == 0:
        return digits[:len(digits)-1:]+[1]
    else:
        return list(map(int, list(str(value+1))))

JAVA
public static int[] plusOne(int[] digits) {
        int[] result = new int[digits.length+1];
        int carry = 1, bit = 0; //carry记录有没有进位, bit 记录当前位的值
        for(int i = digits.length-1; i >= 0; i--){ // 倒序遍历
            result[i+1] = (digits[i]+carry)%10; // 从后往前排列,又因为result比digit多1位,使用是i+1
            carry = (digits[i]+carry)>9?1:0;
        }
        // 循环结束后如果carrry为1,说明最高位进位了,还需要再加一位
        if (1 == carry){
            result[0] = carry;
            return result;
        }
        else{
            //因为没有进位,所以结果的实际长度和digit的一样,而且digit不会再用到了,且不是引用进来的,所以说不会改变原digit
            System.arraycopy(result, 1, digits, 0, digits.length);
            return digits;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值