Leetcode第四单元的LeetCode题解数据结构和算法分析

66. 加一

2018-04-01  本文已影响68人  第四单元

题目

给定一个非负整数组成的非空数组,给整数加一。

可以假设整数不包含任何前导零,除了数字0本身。

最高位数字存放在列表的首位。

思路

大数相加的简单版本。关键是对于999这样的数字的处理,加一后结果为1000,长度与原数组不同。
请看代码吧!

代码

import java.util.Scanner;
import java.util.Arrays;

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++)
            arr[i] = scanner.nextInt();
        System.out.println(Arrays.toString(solution.plusOne(arr)));
    }

    public int[] plusOne(int[] digits) {
        if(digits == null || digits.length == 0) return null;
        int len = digits.length;
        int[] ans = new int[len];
        int carry = 1;
        for(int i = len - 1; i >= 0; i--) {
            ans[i] = (digits[i] + carry) % 10;
            carry = (digits[i] + carry) / 10;           
        }
        //还有进位说明为999这种形式的数
        if(carry == 1) {
            int[] newAns = new int[len+1];
            newAns[0] = 1;
            for(int i = 1; i <= len; i++)
                newAns[i] = 0;
            return newAns;
        }
        return ans;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读