二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。 例如,下面的二进制手表读取 "3:25" 。
给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。 小时不会以零开头: 例如,"01:00" 是无效的时间,正确的写法应该是 "1:00" 。 输入:turnedOn = 1 输出:["0:01","0:02","0:04","0:08","0:16","0:32","1:00","2:00","4:00","8:00"]
代码语言:javascript复制class Solution {
List<String> res=new ArrayList();//存放结果
public List<String> readBinaryWatch(int turnedOn) {
int used[] =new int[10];
dfs(turnedOn,used,0);
return res;
}
public void dfs(int turnedOn,int[] used,int cur){//开灯剩余数量 模拟灯的数组 1开灯 0关灯 cur代表当前要开灯的地方
if(turnedOn==0){
int hour=1*used[0] 2*used[1] 4*used[2] 8*used[3];
int minute=1*used[4] 2*used[5] 4*used[6] 8*used[7] 16*used[8] 32*used[9] ;
if(hour<12&&minute<60){
res.add(format(hour,minute));
}
}
for(int i=cur;i<used.length;i ){//因为开灯的地方,每一个点都有可能
used[i]=1;
dfs(turnedOn-1,used,i 1);//开灯数量-1, 要开灯的地方 1,防止开重复了
used[i]=0;//回溯
}
}
public String format(int hour,int minute){//返回指定格式 hour:minute
StringBuilder sb=new StringBuilder();
sb.append(hour ":");
if(minute<10){
sb.append("0");
sb.append(minute);
}else{
sb.append(minute);
}
return sb.toString();
}
}