Google算法题:二进制手表

来源:互联网 发布:磁条卡写卡软件 编辑:程序博客网 时间:2024/04/30 11:26

九章算法链接



给我们一块表,这个表显示的时间是12小时制,表上显示小时和分钟,且这个表显示的方式是2进制形式(小时4位,分钟6位表示),告诉我们某一时刻表上显示“1”的个数,问我们当前可能的时间有哪些?


样例

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"]


解题思路


方法一:

对于这道题目,首先思考,12小时制的表格,小时是从0~11,分钟是从0~59,这么小的数据我们完全可以预处理出每一种情况下小时或者分钟包含“1”的个数,然后我们分拆num为两块小时和分钟,再枚举下小时和分钟分别占了几个“1”,得到所有的情况。


方法二:

枚举所有情况,分别计算结果


未编译版本

public List<String> solve(int k){dfs("", 10, k);return res;}void dfs(String s, int len, int k){if(len==0 && k==0)convertToTime(s);else if(len==0)return;dfs(s+"1", len-1, k-1);dfs(s+"0", len-1, k);}List<String> res = new ArrayList<String>();public void convertToTime(String s){int hour = binaryToDecimal(s.substring(0,4));int minute = binaryToDecimal(s.substring(4,10));if(hour>11)return;if(minute>59)return;res.add(hour+":"+minute);}int binaryToDecimal(String s){int n = s.length();int res=0;for(int i=0; i<n; i++){if(s.charAt(i)=='1'){res+=Math.pow(2,i);}}return res;}


原创粉丝点击