算法提高之LeetCode刷题数据结构和算法分析

Leetcode之66-加一(Plus One)

2019-04-06  本文已影响2人  北京程序猿

前言

个人网站

公众号: 北京程序猿, 网站 : https://yaml.vip

算法题

题干

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例

示例 1:

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

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

Java代码

public int[] plusOne(int[] digits) {
    if (digits == null || digits.length <= 0) {
        return digits;
    }
    final int LEN = digits.length;
    int digit = 1;
    for (int i = LEN - 1; i >= 0; i--) {
        int bitSum = digits[i] + digit;
        digits[i] = bitSum % 10;
        digit = bitSum / 10;
        if (digit == 0) {
            break;
        }
    }
    if (digit == 0) {
        return digits;
    }
    int[] data = new int[LEN + 1];
    System.arraycopy(digits, 0, data, 1, LEN);
    data[0] = digit;
    return data;
}

代码解析

  1. 第6行digit赋值为1, 因为要加1
  2. 第11-13行代码, 如果过程中digit为0表示没有进位, 可直接返回
  3. 最后3-4行代码表示digit进位不为0的情况下需将进位放在第一位

反问

  1. 这道算法题第一次提交就能通过么?

本文著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请于文首标明作者姓名,保持文章完整性,并附上出处和文章链接!未按规范转载者,作者保留追究相应责任的权利!

作者:北京程序猿

链接:加一

上一篇下一篇

猜你喜欢

热点阅读