66. 加一

作者: 第四单元 | 来源:发表于2018-04-01 11:04 被阅读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;
        }
    }
    

    相关文章

      网友评论

        本文标题:66. 加一

        本文链接:https://www.haomeiwen.com/subject/scpocftx.html