问题描述
思路
1.读懂题意,把题目尽可能抽象成“子集、排列、组合”类型问题
本题的题目总结而言就是:有十盏灯,我分别给他编号0-9,号码0-3代表小时,号码4-9代表分钟。
这就是一个典型的组合问题,说白了就是从10个数字中挑选n个组合起来。
代码
class Solution {
unordered_map <int,int> h={{0,1},{1,2},{2,4},{3,8},{4,1},{5,2},{6,4},{7,8},{8,16},{9,32}};
vector <string> res;
void getRead(int num,int start,pair<int,int> &time)
{
if(num==0) {
if(time.first>11||time.second>59) return;
string shi=to_string(time.first);
string fen=to_string(time.second);
if(fen.size()==1) fen.insert(0,"0");
res.push_back(shi+":"+fen);
return;
}
for(int i=start;i<10;i++) {
if(time.first>11||time.second>59) continue;
if(i<4) time.first+=h[i];
else time.second+=h[i];
getRead(num-1,i+1,time);
if(i<4) time.first-=h[i];
else time.second-=h[i];
}
}
public:
vector<string> readBinaryWatch(int num) {
pair<int,int> time={0,0};
getRead(num,0,time);
return res;
}
};