401.Binary Watch

401.Binary Watch

难度:Easy

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。

每个 LED 代表一个 0 或 1,最低位在右侧。

例如,上面的二进制手表读取 “3:25”。

给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。

案例:
输入: n = 1
返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
注意事项:
输出的顺序没有要求。
小时不会以零开头,比如 “01:00” 是不允许的,应为 “1:00”。
分钟必须由两位数组成,可能会以零开头,比如 “10:2” 是无效的,应为 “10:02”。

时钟一共四个选择,最多亮三盏灯;分钟一共六个选择,最多亮五盏灯。全部枚举出来即可。

class Solution {
vector<vector<string>>H={{"0"}, {"1","2","4","8"}, {"3","5","6","9","10"}, {"7","11"}};
vector<vector<string>>M={{"00"},{"01","02","04","08","16","32"},{"03","05","06","09","10","12", "17","18","20","24","33","34","36","40","48"},{"07","11","13","14","19","21","22","25","26","28","35","37","38","41","42","44","49","50","52","56"},{"15","23","27","29","30","39","43","45","46","51","53","54","57","58"},{"31","47","55","59"}};
public:
vector<string> readBinaryWatch(int num) {
vector<string>res;
if(num>8) return res;
for(int i=max(0,num-5);i<=min(num,3);i++)
for(auto h:H[i])
for(auto m:M[num-i] )
res.push_back(h+":"+m);
return res;
}
};

执行用时 :8 ms, 在所有 C++ 提交中击败了82.86%的用户 内存消耗 :8.8MB, 在所有 C++ 提交中击败了44.21%的用户