思路分析:7+8 +9 = 24,三个数,两个操作符
1、使用三层for循环完成三个数的遍历,并且利用三层for循环中的两个内循环完成两个操作符4*4=16次的运算,第三次循环完成判断
2、第一次循环只有一个数 7+8 +9中的7
3、第二次循环能得到两个数7、8,这时对7、8进行加减乘除,也就完成两个操作符中的一个
4、第三次循环能得到7+8 +9中的7、8、9,就能完成两个操作符中的第二个
5、只要第二个操作符加减乘除中的一个满足条件的i、j、k都算结果,放置到结果集中
public List<List<Integer>> algo() {
final Integer NUM = 24;
List<List<Integer>> lists = new ArrayList<>();
//三个数字运算,两次运算符
//暴力算法 总共花费O(9*9*9)时间复杂度
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
//计算第一个加减乘除的值
int jia = i + j;
int jian = i - j;
int cheng = i * j;
int chu = i / j;
for (int k = 1; k <= 9; k++) {
//完成 i + j +-*/ k == 224 的逻辑
secondCal(NUM, lists, i, j, jia, k);
//完成 i - j +-*/ k == 24 的逻辑
// i - j 小于3必不可能满足条件
if(i - j > 2){
secondCal(NUM, lists, i, j, jian, k);
}
//完成 i * j +-*/ k == 24 的逻辑
secondCal(NUM, lists, i, j, cheng, k);
//完成 i / j +-*/ k == 24 的逻辑
//需要排除i/j产生余数的情况,并且满足i>j
if(i >=j && i % j == 0){
secondCal(NUM, lists, i, j, chu, k);
}
}
}
}
return lists;
}
private void secondCal(Integer NUM, List<List<Integer>> lists, int i, int j, int num, int k) {
//计算第二个加减乘除的值
int num_jia = num + k;
int num_jian = num - k;
int num_cheng = num * k;
int num_chu = num / k;
//去除num / k有余数的情况
if(num % k != 0){
//num / k产生余数,num_chu设置成非NUM
num_chu = Integer.MAX_VALUE;
}
//判断结果是否满足要求
if(num_jia == NUM || num_jian == NUM ||num_cheng == NUM ||num_chu == NUM){
List<Integer> list = new ArrayList<>();
list.add(i);
list.add(j);
list.add(k);
lists.add(list);
System.out.println("num="+num+" k="+k);
System.out.println(list);
}
}
展示部分结果:
结果上面的num表示 i 和 j 的加减乘除
num=4 k=6
[7, 3, 6]
num=28 k=4
[7, 4, 4]
num=3 k=8
[7, 4, 8]
num=12 k=2
[7, 5, 2]
num=15 k=9
[7, 8, 9]
num=16 k=8
[7, 9, 8]
num=8 k=3
[8, 1, 3]
num=8 k=3
[8, 1, 3]
num=6 k=4
[8, 2, 4]
num=4 k=6
[8, 2, 6]
num=16 k=8
[8, 2, 8]
num=24 k=1
[8, 3, 1]
num=12 k=2
[8, 4, 2]
num=4 k=6
[8, 4, 6]
num=32 k=8
[8, 4, 8]
num=3 k=8
[8, 5, 8]
num=48 k=2
[8, 6, 2]
num=15 k=9
[8, 7, 9]
num=16 k=8
[8, 8, 8]
num=72 k=3
[8, 9, 3]
num=17 k=7
[8, 9, 7]
num=8 k=3
[9, 1, 3]
num=18 k=6
[9, 2, 6]
num=12 k=2
[9, 3, 2]
num=27 k=3
[9, 3, 3]
num=6 k=4
[9, 3, 4]
num=3 k=8
[9, 3, 8]
num=4 k=6
[9, 5, 6]
num=3 k=8
[9, 6, 8]
num=15 k=9
[9, 6, 9]
num=16 k=8
[9, 7, 8]
num=72 k=3
[9, 8, 3]
num=17 k=7
[9, 8, 7]
num=18 k=6
[9, 9, 6]