本文共 2683 字,大约阅读时间需要 8 分钟。
示例:
输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。
链接:
参考题解大神的巧妙解法:
一个数用数组存储,那么加上1之后只有两种情况/** * 将一个用表示数字的数组传入,加上1之后,返回新数组 * @param digits 传入的数组 * @return 返回加一之后的新数组 */ public static int[] plusOne(int[] digits){ int len = digits.length; for(int i = len-1;i>=0;i--){ digits[i]++; digits[i] = digits[i]%10; //末位不是9,直接返回 if(digits[i]!=0) return digits; } //最高位为9的情况,创建一个比原数组长1的数组 int[] newDigits = new int[len+1]; //首位置1,其余初始化为0 newDigits[0] = 1; return newDigits; }
说明:
示例:
输入: nums1 =[1,2,3,0,0,0],m =3 nums2 =[2,5,6],n =3 输出: [1,2,2,3,5,6]
链接:
参考题解:
/** * 合并并排序到第一个数组 * * @param nums1 传入的第一个数组 * @param m 第一个数组的长度 * @param nums2 传入的第二个数组 * @param n 第二个数组的长度 */ public static void merge(int[] nums1, int m, int[] nums2, int n) { int p1 = m - 1;//指向nums1的有数字的最后一位 int p2 = n - 1;//指向nums2的有数字的最后一位 int p = m + n - 1; //从有数字的最后一位向前,一一对比,两者较大的数存到nums1的p位置,分别向前 while (p1 >= 0 && p2 >= 0) { nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--]; } //由于是存到nums1上的,所以保证最后p1无元素可指的时候,把nums2上的元素按顺序拷贝到nums1 System.arraycopy(nums2, 0, nums1, 0, p2 + 1); }
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
说明:
返回的下标值(index1 和 index2)不是从零开始的。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
链接:
参考题解:
/** * 得到传入数组中两个元素和刚好是目标数字的位置,用数组返回 * @param numbers 传入的目标数组 * @param target 传入的目标数字 * @return 返回两元素和为目标数字的对应位置 */ public static int[] twoSum(int[] numbers,int target){ int i = 0; int j = numbers.length-1; if(numbers == null) return null; while(itarget){ j--; }else{ i++; } } return null; }
转载地址:http://oyofz.baihongyu.com/