LeetCode刷题实战66:加一

算法的重要性,我就很少说了吧,想去大厂,就必需要通过基础知识和业务逻辑面试+算法面试。因此,为了提升你们的算法能力,这个号后续天天带你们作一道算法题,题目就从LeetCode上面选 !git

今天和你们聊的问题叫作 加一,咱们先来看题面:面试

https://leetcode-cn.com/problems/plus-one/算法

Given a non-empty array of digits representing a non-negative integer, increment one to the integer.数组

 

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit.ide

 

You may assume the integer does not contain any leading zero, except the number 0 itself.code

题意

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

例题

示例 1:

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

示例 2:

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

解题

解法的关键在于弄明白什么状况下会产生进位。使用个位、十位、百位进行列举:个位:想让个位+1进位,那么个位必须为99+1 = 0carry = 1十位:想让十位+1进位,那么十位必须为9,想要产生进位carry,那么必须由个位进位而来。想让个位进位,个位必须为9.99 + 1 = 00carry = 1百位:想让百位+1进位,那么百位必须为9,想要产生进位carry,那么必须由十位进位而来,想让十位进位,那么十位必须为9,想要产生进位,个位必须为9。999 + 1 = 000carry = 1根据以上能够推论得出两种状况:最高位进位若最高位进位,那么比他低的位数字都为9,且加1后都为0,须要初始化一个长度为(lenght+1)的新数组,0位置为1表明进位。最高位不进位若最高位不进位,那么不须要产生新数组,后续数字由更低位计算而来。咱们来看下代码

 

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[] result = new int[digits.length + 1];
        result[0] = 1;
        return result;
    }

    return digits;
    }
}leetcode

好了,今天的文章就到这里。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

相关文章
相关标签/搜索