public class Solution
{
/// <summary>
/// 将二进制字符串转为十进制数字
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
private int BinToInt(string s)
{
var len = s.Length;
int[] bins = new int[len]; int sum = ; for (int i = ; i < len; i++)
{
int n = Convert.ToInt32(s[i].ToString());
int mi = len - i - ;
sum += n * Convert.ToInt32(Math.Pow(, mi));
} return sum;
} /// <summary>
/// 将十进制数字转换为二进制字符串
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private string IntToBin(int n)
{
StringBuilder sb = new StringBuilder();
do
{
var s = (n % ).ToString();
sb.Append(s);
n = n / ;
} while (n != ); var list = sb.ToString().Reverse();
sb.Clear();
foreach (var c in list)
{
sb.Append(c);
}
return sb.ToString();
} //key表示1的个数,value是对应的可能的数值
Dictionary<int, List<int>> HourDic = new Dictionary<int, List<int>>();
Dictionary<int, List<int>> MinDic = new Dictionary<int, List<int>>(); public IList<string> ReadBinaryWatch(int num)
{
//将从0到11的数字依次放入HourDic中
for (int i = ; i <= ; i++)
{
//将数字依据1的个数存入不同的组
var s = IntToBin(i);
var countOne = ;
foreach (var c in s)
{
if (c == '')
{
countOne++;
}
}
if (!HourDic.ContainsKey(countOne))
{
HourDic.Add(countOne, new List<int>() { i });
}
else
{
HourDic[countOne].Add(i);
}
} //将从0到59的数字依次放入MinDic中
for (int i = ; i <= ; i++)
{
var s = IntToBin(i);
var countOne = ;
foreach (var c in s)
{
if (c == '')
{
countOne++;
}
}
if (!MinDic.ContainsKey(countOne))
{
MinDic.Add(countOne, new List<int>() { i });
}
else
{
MinDic[countOne].Add(i);
}
} IList<string> list = new List<string>(); for (int i = ; i <= num; i++)
{
//i用于小时,
//j用于时间,
int j = num - i;
StringBuilder sb = new StringBuilder();
if (HourDic.ContainsKey(i) && MinDic.ContainsKey(j))
{
//列出可能的小时
var list1 = HourDic[i];//用于存储所有可能的小时 //列出可能的分钟
var list2 = MinDic[j];//用于存储所有可能的分钟 //做笛卡尔乘积,存入list
foreach (var l1 in list1)
{
foreach (var l2 in list2)
{
sb.Append(l1.ToString());
sb.Append(":");
if (l2 < )
{
sb.Append("");
}
sb.Append(l2.ToString());
list.Add(sb.ToString());
sb.Clear();
}
}
}
} foreach (var l in list)
{
Console.WriteLine(l);
} return list;
}
}

https://leetcode.com/problems/binary-watch/#/description

leetcode401的更多相关文章

  1. [Swift]LeetCode401. 二进制手表 | Binary Watch

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

随机推荐

  1. leetcode:Reverse Integer【Python版】

    1.在进入while之前,保证x是非负的: 2.符号还是专门用flag保存 =================== 3.另一思路:将integer转换成string,然后首位swap,直至中间: cl ...

  2. stenciljs 学习三 组件生命周期

    stenciljs 组件包含好多生命周期方法, will did load update unload 实现生命周期的方法比价简单类似 componentWillLoad ....,使用typescr ...

  3. benthos stream 处理工具说明

    benthos 是golang 编写的流处理工具,同时也可以作为一个类库使用,当前支持的source sink 还是比较全的 (kafka rabbitmq http service s3 redis ...

  4. stardog 基本试用(社区版)

    stardog 是一个知识图谱的实现,实现了sparql 以及graphql 协议,使用起来也比较简单,官方文档挺全 下载 社区版,注册之后会有邮件通知,里面会包含license 以及软件包 下载地址 ...

  5. mysql常用的聚合函数

    GROUP BY(聚合)函数本章论述了用于一组数值操作的 group (集合)函数.除非另作说明, group 函数会忽略 NULL 值. 假如你在一个不包含 ROUP BY子句的语句中使用一个 gr ...

  6. PHP中开启gzip压缩的2种方法

    网页开启gzip压缩以后,其体积可以减小20%~90%,可以节省下大量的带宽,从而减少页面响应时间,提高用户体验. php配置改法: 复制代码代码如下: zlib.output_compression ...

  7. 【转】每天一个linux命令(25):linux文件属性详解

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/23/2783762.html Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模 ...

  8. hadoop之 node manager起不来, 执行mapreduce 程序hang住

    现象: node manager起不来, 执行mapreduce 程序hang住 namenode 进程状态查询[root@hadp-master sbin]# jps8608 ResourceMan ...

  9. Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复

    Oracle RAC 中OCR 和Voting Disk 备份在我的blog: Oracle RAC 常用维护工具和命令 中已经有说明,现在再次把它单独拿出做一个说明, 因为OCR 和Voting D ...

  10. windows python3 安装gittle

    1 从github clone gittle项目, git clone https://github.com/FriendCode/gittle.git 2 进行到下载的项目,执行安装 python ...