首页 > 其他 > 详细

LeetCode66.加一

时间:2021-06-05 11:32:18      阅读:9      评论:0      收藏:0      [点我收藏+]

LeetCode66.加一

题目描述

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

思路分析

  1. 用数组模拟一个非负整数,然后对其进行加一计算,实质还是一个整数的加法运算
  2. 定义变量carry保存每次计算后的进位,然后将进位和下一次高位的计算相加,将 计算的结果继续保存到原数组,可减少空间的消耗
  3. 在数组所有位都进行完计算后,判断有没有向最高位的进位,如果没有,直接返回原数组,否则需要创建新数组,保存最高位进位和低位
  4. 源码及详解见下

源码及分析

/**
     * 
     * @param digits 要进行加一运算的数组
     * @return 返回计算后的结果
     */
    public int[] plusOne(int[] digits) {
        //定义变量 carry保存进位
        int carry = 0;
        //数字的最低位先加一
        int sum = digits[digits.length - 1] + carry + 1;
        //将计算的结果再保存到原位置
        digits[digits.length - 1] = sum % 10;
        //并保存计算后是否有进位
        carry = sum / 10;
        //然后从次低位开始计算,同样将计算的结果保存到原位置
        for (int i = digits.length - 2; i >= 0; i--) {
            digits[i] = sum % 10;
            carry = sum / 10;
        }
        //循环结束后判断最高位有没有进位,如果没有进位,直接结束
        if (carry == 0) {
            return digits;
        } else {
            //如果有进位,需要将进位也加进去,需要创建一个新数组,保存最高位进位和低位结果
            int[] arr = new int[digits.length + 1];
            arr[0] = carry;
            for (int i = 0, j = 1; i < digits.length; i++, j++) {
                arr[j] = digits[i];
            }
            return arr;
        }
    }

LeetCode66.加一

原文:https://www.cnblogs.com/mx-info/p/14851908.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!