您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
加1(图文)
第十三双眼睛2023-11-25【数据结构与算法】人已围观
简介加1
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
思路:将数组的元素转化为一个整数,然后加1,在转换为数组,这是最容易想到的办法,但是不管用int还是long都又溢出的可能。代码如下。
最正确的方法是,不转换为数字,直接在数组上操作,给最后一个元素加1,如果不超过9,就不用管,如果超过9,就给前一位加1,最麻烦的可能就是要给数组扩容。
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:
很赞哦! ()
上一篇:最后一个单词的长度(图文)
下一篇:合并两个有序数组(图文)