這題我的思路是用一個(gè)長(zhǎng)度是10的數(shù)組,隨機(jī)地把1灑落在這個(gè)這個(gè)數(shù)組上,然后對(duì)前4個(gè)做計(jì)算,后6個(gè)做計(jì)算,拼接起來(lái)就行了。問(wèn)題出怎么才能遍歷到所有的撒落的可能性。首先我事先不知道n是幾,所以不能提前寫(xiě)好n個(gè)for。所以,我感覺(jué)這題應(yīng)該用遞歸。
看答案了。
先用一個(gè)別人的有點(diǎn)trick的方法(但是這個(gè)方法并不能解釋我上面的疑惑,就是怎么找出所有散落的可能性):bitCount。計(jì)算0:00到11:59里面所有可能的值然后對(duì)比bitCount跟num對(duì)比,對(duì)得上就輸出。挺巧妙的,不過(guò)這種需要遍歷所有的時(shí)間,真的好嗎。
public List<String> readBinaryWatch(int num) {
List<String> res = new ArrayList<>();
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 60; j++) {
if (Integer.bitCount(i) + Integer.bitCount(j) == num) {
res.add(String.format("%d:%02d", i, j));
}
}
}
return res;
}
dfs
這題確實(shí)是可以用permutation+combination做的。
https://discuss.leetcode.com/topic/59494/3ms-java-solution-using-backtracking-and-idea-of-permutation-and-combination