您的位置:首页 > 编程语言 > C语言/C++

Leetcode 401. Binary Watch

2016-10-28 22:03 246 查看
题目链接:https://leetcode.com/problems/binary-watch/

题目描述:

A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).

Each LED represents a zero or one, with the least significant bit on the right.



For example, the above binary watch reads "3:25".

Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.

Example:
Input: n = 1
Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

这道题用深度优先搜索来做,backtracking,回溯法,用递归实现,递归的设计一直不太会,需要多做题强化,这个代码是参考的人家的,自己看懂了又写了一遍。

class Solution {
public:
vector<string> readBinaryWatch(int num) {
vector<string> res;
for(int i=max(0,num-6);i<min(num+1,4);i++)
{
vector<int> vec1;//用来存放时
vector<int> vec2;//用来存放分
dfs(i,0,0,4,vec1);//存放亮的个数为i时,时的所有可能结果
dfs(num-i,0,0,6,vec2);//<span style="font-family: Arial, Helvetica, sans-serif;">存放亮的个数为num-i时,分的所有可能结果</span>
//保存结果
for(int i=0;i<vec1.size();i++)
{
for(int j=0;j<vec2.size();j++)
{
string tmp=to_string(vec1[i])+":"+(to_string(vec2[j]).size()==1?"0":"")+to_string(vec2[j]);
res.push_back(tmp);
}
}
}
return res;
}
//注意dfs的设计
void dfs(int k,int val,int curIndex,int len,vector<int> &vec){
if(k==0&&len==4&&val<12) vec.push_back(val);
if(k==0&&len==6&&val<60) vec.push_back(val);
if(curIndex==len||k==0) return;
dfs(k,val,curIndex+1,len,vec);
val=val+pow(2,curIndex);curIndex++;k--;
dfs(k,val,curIndex,len,vec);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode C++ backtracking