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. 【vue】vue-cli 脚手架项目简介(一) - package.json

    vue-cli是用来生成 vue项目的命令行工具,它的使用方法是这样的: vue init <template-name> <project-name>第二个参数 templa ...

  2. 龙儿经理嘴上经常说的B树

    国内的数据结构教材一般是按照Knuth定义,即“阶”定义为一个节点的子节点数目的最大值. 对于一棵m阶B-tree,每个结点至多可以拥有m个子结点.各结点的关键字和可以拥有的子结点数都有限制 规定m阶 ...

  3. Tensorflow & Python3 做神经网络(视频教程)

    Tensorflow 简介 1.1 科普: 人工神经网络 VS 生物神经网络 1.2 什么是神经网络 (Neural Network) 1.3 神经网络 梯度下降 1.4 科普: 神经网络的黑盒不黑 ...

  4. 记录一下 FastAdmin getOriginData 问题

    记录一下 FastAdmin getOriginData 问题 FastAdmin 对 用户端新增了一个 money 字段,但在后台修改时出错,提示没有 getOriginData 方法. 跟踪了一下 ...

  5. yarn 知识点

    yarn 与 npm 功能对应表格: 命令 yarn npm 初始化 yarn init npm init 安装项目所有包(注意) yarn npm install 添加 dependencies y ...

  6. Spring Boot 整合 FastDFS 客户端

    原文地址:Spring Boot 整合 FastDFS 客户端 博客地址:http://www.extlight.com 一.前言 前两篇介绍整体上介绍了通过 Nginx 和 FastDFS 的整合来 ...

  7. Python+VSCode+Git 学习总结

    稍等,先写个脑图... 继续,读完本文,你会学会: 1.如何在VSCode中写Python代码: 2.如何在VSCode中使用Git: 为什么写这篇总结 首先,我假设你是一名Python语言初学者,你 ...

  8. 关于WCF

    凡是被DataMember声明修饰的属性,必须要有get和set访问器,靠靠靠!!!! 给接口加 XmlSerializerFormat 强制用xml序列化.

  9. Mybatis学习(4)输入映射、输出映射、动态sql

    一.输入映射: 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型 1) 传递pojo的包装对象 需求是:完成用户信息的综合查询,传入的查询条件复 ...

  10. 显式等待大结局___封装成API方便控制层调用

    控制层 测试用例层: 控制层示例代码: #coding=utf-8from selenium.webdriver.common.by import Byfrom selenium.webdriver. ...