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. 《DSP using MATLAB》Problem 4.10

    今天擦完了玻璃,尽管有地方不那么明亮干净,冷风中瑟瑟发抖,年也快临近了. 代码是从网上找的, function [p, np, r, nr] = deconv_m(b, nb, a, na) % Mo ...

  2. stenciljs 学习二 pwa 简单应用开发

    stenciljs 介绍参考官方网站,或者 https://www.cnblogs.com/rongfengliang/p/9706542.html demo 项目使用脚手架工具 创建项目 使用脚手架 ...

  3. js基础(常用语法、类型、函数)

    js函数集 ·字符串(String)  1.声明  var myString = new String("Every good boy does fine.");  var myS ...

  4. 消息队列在VB.NET数据库开发中的应用

    我们先简单的了解一下什么是消息队列(MSMQ)?消息队列是 Windows 2000(NT也有MSMQ,WIN95/98/me/xp不含消息队列服务但是支持客户端的运行)操作系统中通讯的基础,也是用于 ...

  5. Ritchie Lawrence 批处理函数库中英文版

    可以到这个网址去看看,如果你是注册用户,还可以下载到bat的很多函数库,具体地址如下: http://www.bathome.net/viewthread.php?tid=3056&extra ...

  6. 02.将uboot,kernel,rootfs下载到开发板上

    转载,侵删 将uboot,kernel,rootfs下载到开发板上 1.为什么要下载 所谓下载,也称烧录,部署. 1.1.什么是u-boot Hi3518EV200 单板的 Bootloader 采用 ...

  7. 非root用户执行程序---sudo的使用

    场景 在应用部署过程中,会遇到这样的问题:前期需要root用户执行配置.初始化工作,而具体的业务应用需要使用非root用户启动. 如何解决呢? 方法 可以使用sudo,实现授权. sudo命令授权,既 ...

  8. 【python】重定向输出

    重定向的理解:就是把所要输出的结果输出到其他的地方.常用方法:"print >>",(若有其他方法后续补充) 举个例子: __author__ = 'paulwinfl ...

  9. SSD学习,keras

    https://github.com/pierluigiferrari/ssd_keras

  10. wxWidgets:消息处理流程

    首先解释下EventHandler. wxWidgets中EventHandler并不是简单的指消息(事件)处理函数,而是一个用于处理窗口系统消息的类.收到消息后,wxEventHandler会调用e ...