题目描述:
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。
每个 LED 代表一个 0 或 1,最低位在右侧。
思路分析:
将表的每一个灯从0-9进行编号,然后从里面选出num个所有的组合,计算出时间,选出符合的组合
class Solution {
public List<String> readBinaryWatch(int num) {
List<List<Integer>> tmp=new ArrayList<>();
List<String> res=new ArrayList<>();
dfs(0,num,new ArrayList<>(),tmp);
for(List<Integer> list:tmp){
int hour=0;
int minute=0;
for(int i:list){
if(i<4){
hour+=(1<<i);
}else{
minute+=(1<<(i-4));
}
}
if(hour>11||minute>59){
continue;
}
String m=minute<10?"0"+minute:""+minute;
res.add(hour+":"+m);
}
return res;
}
private void dfs(int start,int num,List<Integer> list,List<List<Integer>> tmp){
if(num==0){
tmp.add(new ArrayList(list));
return;
}
for(int i=start;i<=9;i++){
list.add(i);
dfs(i+1,num-1,list,tmp);
list.remove(list.size()-1);
}
}
}