401. 二进制手表
思路:
输入: n = 1
返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
记录一下自己脑子不太好使的一天,这么简单一题,我竟然在想如何排列组合!实际上只用遍历一下所有可能,选出满足亮灯个数的组合就可以了,毕竟组合最多也就12乘60个:
public List<String> readBinaryWatch(int num) {
List<String> res = new LinkedList<>();
for(int i=0;i<12;i++){
for(int j=0;j<60;j++){
if(count1(i) + count1(j) == num) res.add(i + ":" + (j < 10? "0"+j : j));
}
}
return res;
}
public int count1(int n){
int res = 0;
while(n!=0){
n = n&(n-1);
res++;
}
return res;
}
但是要注意观察题目,题目中分钟小于10时前面需要补0!!