題目:
有15個(gè)瓶子衷快,其中最多有一瓶有毒买喧,現(xiàn)在有四只老鼠,喝了有毒的水之后憔杨,第二天就會(huì)死鸟赫。如何在第二天就可以判斷出哪個(gè)瓶子有毒(題目來源:https://juejin.im/post/5b3c40f4e51d45191a0d0aae)
解決思路:
老鼠有4只,計(jì)算所有組合:
一共15種,正好一種組合對(duì)應(yīng)一個(gè)瓶子抛蚤,第二天哪個(gè)組合的老鼠死了台谢,就是哪瓶水有毒
代碼計(jì)算四只老鼠的所有組合
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) //遞歸
}
}
//輸出結(jié)果:
["a", "ab", "abc", "abcd", "abd", "ac", "acd", "ad", "b", "bc", "bcd", "bd", "c", "cd", "d"]