func judgePoint24(cards []int) bool {
SearchCards := make([]float64, len(cards))
for i := range SearchCards {
SearchCards[i] = float64(cards[i])
}
return dfs(SearchCards)
}
func dfs(nums []float64) bool {
if len(nums) == 1 {
return math.Abs(nums[0]-24) < 1e-9
}
flag := false
for i := 0; i < len(nums); i++ {
for j := i + 1; j < len(nums); j++ {
n1, n2 := nums[i], nums[j]
NewNums := make([]float64, 0)
for k := 0; k < len(nums); k++ {
if k != i && k != j {
//保证i和j不被加入新数组,而之后加入i和j的加减乘除组合
NewNums = append(NewNums, nums[k])
}
}
//枚举计算情况,并且dfs到下一层,每一层长度-1
flag = flag || dfs(append(NewNums, n1+n2))
flag = flag || dfs(append(NewNums, n1-n2))
flag = flag || dfs(append(NewNums, n2-n1))
flag = flag || dfs(append(NewNums, n1*n2))
if n1 != 0 {
flag = flag || dfs(append(NewNums, n2/n1))
}
if n2 != 0 {
flag = flag || dfs(append(NewNums, n1/n2))
}
if flag {
return true
}
}
}
return false
}