记录下自己的解题思路思考过程
第一次思考:考虑有四种运算符,四个数字作为一个序列,因此使用回溯法,带入回溯法框架
boolean flag=false;
void dfs(int cur,int sum){
if(cur==4){
//判断总数是否等于24,若是,将flag置为true
}else for(i:14){//尝试四种运算符
//计算sum
//回溯dfs(cur+1,sum)
}
}
运行,案例通过90%
第二次思考:原来是虽然运算符的情况通过回溯全部尝试过了,但数字序列的顺序却只试过一种
因此,还需要考虑所有的序列排列,即求四个数字的全排列。
直接使用刘汝佳紫书的全排列计算方法,也是回溯法,每次得到一个完整的排列,调用dfs计算结果即可,即两层回溯
int[] obj;
void permutation(int[] source,int cur){
if(cur==4){
dfs(0,0);//计算结果
}else for(i:1
4){//尝试放入四个数字
if(source[i]满足条件)
obj[cur]=source[i];
permutation(source,cur+1);
}
}
3、案例全部通过