题目:
有15个瓶子,其中最多有一瓶有毒,现在有四只老鼠,喝了有毒的水之后,第二天就会死。如何在第二天就可以判断出哪个瓶子有毒(题目来源:https://juejin.im/post/5b3c40f4e51d45191a0d0aae)
解决思路:
老鼠有4只,计算所有组合:
组合公式.png 老鼠组合计算.png
一共15种,正好一种组合对应一个瓶子,第二天哪个组合的老鼠死了,就是哪瓶水有毒
代码计算四只老鼠的所有组合
let arr: [String] = ["a", "b", "c", "d"]
var finalArr: [String]? = Array()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// 组合
for i in 0..<arr.count{
finalArr?.append(arr[i])
combine(temp: arr[i], index: i+1)
}
AFPrint(message: finalArr)
}
private func combine(temp: String, index: Int){
for j in index ..< arr.count{
finalArr?.append(temp + arr[j])
combine(temp: temp + arr[j], index: j + 1) //递归
}
}
//输出结果:
["a", "ab", "abc", "abcd", "abd", "ac", "acd", "ad", "b", "bc", "bcd", "bd", "c", "cd", "d"]
网友评论