这个题目的目标是从给定的数字数组中找出所有满足以下条件的三位整数:
-
由数组中三个不同位置的数字组成(数字可以重复,但位置不能重复使用)
-
不能有前导零(即第一位不能是0)
-
必须是偶数(即最后一位必须是0,2,4,6,8)
思考:当传一个数组·进来的时候,通过数组下标遍历出三个数组成三位数,它不可以重复而且个位是偶数,百位不为0。
解决:既然要遍历出三个数字组成三维数,使用for循环下标,三个for嵌套代表个位十位百位,然后把这个数组转换为ArrayList,然后进行排序,将排序后的列表转换为数组返回即可。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class Solution {
public int[] findEvenNumbers(int[] digits) {
//使用HashSet来存储结果,因为它会自动去除重复的值
Set<Integer> result = new HashSet<>();
// 遍历所有可能的三个数字组合
for (int i = 0; i < digits.length; i++) {
for (int j = 0; j < digits.length; j++) {
for (int k = 0; k < digits.length; k++) {
// 确保三个位置使用不同的索引(允许数字相同但位置不同)
if (i == j || j == k || i == k) {
continue;
}
int first = digits[i];
int second = digits[j];
int third = digits[k];
// 检查是否有前导零以及是否是偶数
if (first != 0 && third % 2 == 0) {
int number = first * 100 + second * 10 + third;
result.add(number);
}
}
}
}
// 转换为列表并排序
List<Integer> sortedList = new ArrayList<>(result);
Collections.sort(sortedList);
// 转换为数组返回
int[] answer = new int[sortedList.size()];
for (int i = 0; i < sortedList.size(); i++) {
answer[i] = sortedList.get(i);
}
return answer;
}
}
关注我,每天更新数据结构或者力扣题