您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法

加1(图文)

第十三双眼睛2023-11-25【数据结构与算法】人已围观

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

思路:将数组的元素转化为一个整数,然后加1,在转换为数组,这是最容易想到的办法,但是不管用int还是long都又溢出的可能。代码如下。
public static long[] method1(long nums[]) {
    int length = nums.length;
    long res = 0;
    for (int i = 0; i< length ; i ++) {
        int temp = 1;
        for (int j = length - 1 - i; j > 0; j --) {
            temp = temp * 10;
        }
        res = res + nums[i] * temp;
    }
    res = res + 1;
    String s = res + "";
    long[] r = new long[s.length()];
    char[] chars = s.toCharArray();
    for (int i = 0; i< r.length; i++) {
        r[i] = Character.getNumericValue(chars[i]);
    }
    return r;
}

最正确的方法是,不转换为数字,直接在数组上操作,给最后一个元素加1,如果不超过9,就不用管,如果超过9,就给前一位加1,最麻烦的可能就是要给数组扩容。
public static int[] method2(int[] digits) {
    int carry = 1;
    for (int i = digits.length - 1; i >= 0; i--) {
        if (digits[i] < 9) {
            digits[i] = digits[i] + 1;
            carry = 0;
            break;
        } else {
            digits[i] = 0;
        }
    }
    if (carry == 0) {
        return digits;
    }
    int[] res = new int[digits.length + 1];
    res[0] = 1;
    for (int i = 1; i< res.length; i++) {
        res[i] = 0;
    }
    return res;
}

 

Tags:

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们