简洁大气的网站设计,泗洪有做网站,设计兼职,wordpress 蜜蜂采集思路
方法一#xff1a;使用Set集合 1.首先是三层for循环#xff0c;遍历#xff0c;并且遇到不满足的情况#xff0c;便跳过#xff0c;继续计算。不如前导为0,以及遍历同一个数组下标的情况 2.使用Set集合来确保答案是唯一的#xff0c;使用桶来标记也是可以的 3.但是…思路
方法一使用Set集合
1.首先是三层for循环遍历并且遇到不满足的情况便跳过继续计算。不如前导为0,以及遍历同一个数组下标的情况 2.使用Set集合来确保答案是唯一的使用桶来标记也是可以的 3.但是使用了Set集合就要将其转换为数组来返回因为题目要求返回的是数组并且也要用到一些Set的方法。 class Solution {public int[] findEvenNumbers(int[] digits) {SetInteger resultSet new HashSet();int len digits.length;for (int i 0; i len; i) {if (digits[i] 0) continue;for (int j 0; j len; j) {if (j i) continue;for (int k 0; k len; k) {if (k i || k j || digits[k] % 2 ! 0) continue;resultSet.add(digits[i] * 100 digits[j] * 10 digits[k]);}}}//将Set集合转为ListListInteger res new ArrayList(resultSet);Collections.sort(res);int[] resultArray new int[res.size()];for (int i 0; i res.size(); i) {resultArray[i] res.get(i);}return resultArray;}} 通过情况 方法二使用数字标记 1.因为是三位的偶数所以只要大小为1k的数字即可 2.前面的判断条件都是一样的不满足的情况就跳过 3.不同的是因为不是Set集合没有办法自动去重但是好在范围只在100~999的偶数即可所以i2 4.因为不知道有多少满足条件的数字所以仍然使用List集合并且在得到结果后再转为数组。 class Solution {public int[] findEvenNumbers(int[] digits) {int[] resnew int[1000];int len digits.length;for (int i 0; i len; i) {if (digits[i] 0) continue;for (int j 0; j len; j) {if (j i) continue;for (int k 0; k len; k) {if (k i || k j || digits[k] % 2 ! 0||res[digits[i] * 100 digits[j] * 10 digits[k]]!0) continue;res[digits[i] * 100 digits[j] * 10 digits[k]];}}}ListInteger resultListnew ArrayList();for (int i 100; i 999 ; i2) {if(res[i]!0)resultList.add(i);}int[] resultArray new int[resultList.size()];for (int i 0; i resultList.size(); i) {resultArray[i] resultList.get(i);}return resultArray;}} 通过情况 方法三直接对0~9出现的数字进行标记 1.既然方法二用的数组标记是对100-999中的进行标记。那么还有没有更简便的方法呢 2.直接对0-9的数字进行标记出现了则 3.并且i从1开始这样就可以避免前导0的问题k2就能确保找到的都是偶数 4.计算的时候暂时减去使用的次数这是为了防止后面的位数进行多次的使用如果次数不足的情况下。计算完成后再加回来因为便利和出现的次数无关遍历是从0~9开始的遍历如果数字不存在则会跳过。 5.最后仍是将List转化为 int[ ],返回 class Solution {public int[] findEvenNumbers(int[] digits) {// 创建一个长度为10的数组cnt来记录digits中各个数字(0-9)出现的次数int[] cnt new int[10];for (int d : digits) {cnt[d]; // 统计每个数字出现的次数}// 创建一个列表list用于存储找到的所有符合条件的三位偶数ListInteger list new ArrayList();// 外层循环遍历可能的百位数字i (从1到9避免前导零)for (int i 1; i 10; i) {if (cnt[i] 0) continue; // 如果该数字不存在于digits中则跳过// 暂时减少百位数字i的计数表示它已经被使用cnt[i]--;// 中间层循环遍历可能的十位数字j (从0到9)for (int j 0; j 10; j) {if (cnt[j] 0) continue; // 如果该数字不存在于digits中则跳过// 暂时减少十位数字j的计数表示它已经被使用cnt[j]--;// 内层循环遍历可能的个位数字k (从0到9步长为2确保是偶数)for (int k 0; k 10; k 2) {if (cnt[k] 0) { // 如果该偶数存在于digits中// 构建三位数并添加到结果列表中list.add(100 * i 10 * j k);}}// 恢复十位数字j的计数cnt[j];}// 恢复百位数字i的计数cnt[i];}// 将结果列表转换为数组int[] nums new int[list.size()];for (int i 0; i list.size(); i) {nums[i] list.get(i);}// 返回结果数组return nums;}}