401. 二进制手表

2021-06-22 22:03:08 浏览数 (1)

二进制手表顶部有 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();
       
    }
}

0 人点赞