401 binary watch

 文章题目来源于leetcode,解法学习了讨论去的解法。
 问题:有一种二进制LED表。上面的4个LED灯表示小时,下面6个LED灯表示分钟。给定一个int值,写出可能表示的时间。例如输入1,
Input: n = 1
Return: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]
 注意:1输出结果的顺序无所谓;2 小时不能有高位0,例如”01:00”是错误的,”1:00”是正确的;3 分钟用两位数表示,例如”1:1”是错误的,”1:01”是正确的。
 
 思路:这是一道典型的深度优先搜索,枚举各种情况就好了。枚举所有小时的可能性,再枚举所有分钟的可能性。我确定我会做,但是失败了。因为我同时在枚举小时和分钟。以前处理的都是单个的枚举。
 

// 每一步消耗一个数,同时枚举小时和分钟,结果错误,有重复的情况。private void visit(int num, int countHour, int countMinute, int startHourIndex, int startMinuteIndex) {if (num == 0) {if (countHour < 12) {String str = countHour + ":" + (countMinute < 10 ? "0" + countMinute : countMinute);if (!list.contains(str)) {list.add(str);}}} else {if (startMinuteIndex < mininutes.length) {visit(num - 1, countHour, countMinute + mininutes[startMinuteIndex], startHourIndex, startMinuteIndex + 1);visit(num, countHour, countMinute, startHourIndex, startMinuteIndex + 1);}if (startHourIndex < hours.length) {visit(num - 1, countHour + hours[startHourIndex], countMinute, startHourIndex + 1, startMinuteIndex);visit(num, countHour, countMinute, startHourIndex + 1, startMinuteIndex);}}}

收获:
1 看了别人的解决方案后,分别枚举小时、分钟,最后再组合到一起。
2 还有一种方法更牛。提前把所有小时的可能组合、所有分钟可能的组合列出来。然后再把小时、分钟组合。参考链接。

private int[] hours = new int[] { 1, 2, 4, 8 };private int[] mininutes = new int[] { 1, 2, 4, 8, 16, 32 };private List<String> list;public List<String> readBinaryWatch(int num) {list = new ArrayList<String>();for (int i = 0; i <= num; i++) {List<Integer> hours = visitHour(i);List<Integer> minutes = visitMinute(num - i);for (Integer h : hours) {if (h < 12) {for (Integer m : minutes) {if (m < 60) {list.add(h + ":" + (m < 10 ? "0" + m : m));}}}}}return list;}private List<Integer> visitMinute(int num) {List<Integer> list = new ArrayList<Integer>();visit2(num,0,0,list,mininutes);return list;}private List<Integer> visitHour(int num) {List<Integer> list = new ArrayList<Integer>();visit2(num,0,0,list,hours);return list;}private void visit(int num,int count, int startIndex, List<Integer> list,int[] nums) {if(num<=0){list.add(count);return;}if(startIndex>=nums.length){return;}visit(num-1,count+nums[startIndex],startIndex+1,list,nums);visit(num,count,startIndex+1,list,nums);}/*** visit的另外一种写法* @param num* @param count* @param startIndex* @param list* @param nums*/private void visit2(int num,int count, int startIndex, List<Integer> list,int[] nums) {if(num<=0){list.add(count);return;}for(int i=startIndex;i<nums.length;i++){visit2(num-1,count+nums[i],i+1,list,nums);}}

参考资料:
1 [题目](https://leetcode.com/problems/binary-watch/#/description)
2 讨论1
3 讨论2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7立项申请

项目诞生的驱动因素 系统服务请求书 识别需求提出项目建议书 项目建议书内容 项目的可行性研究 如何进行项目的可行性研究 市场可行性研究 市场可行性分析注意事项 捕捉用户需求是一件困难的事 三个苹果改变世界 经济可行性 收益与成本 投入产出分析 投资分析期 纯收入 技术可行…

【数据结构与算法】数组与链表

数组的定义和特性 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表&#xff08;Linear List&#xff09;&#xff1a;数组、链表、队列、栈 非线性表&#xff1a;树 图 连续的内存空间和相…

8构建项目组

组建项目组 组建项目组的任务 项目组架构 项目赞助人职责 项目经理的标签 项目经理的责任 项目成员的职责 案例分析 西天取经的只能架构 西天取经项目组 一个良好团队的七个要素

MySQL数据库面试题

目录数据库基础知识为什么要使用数据库什么是SQL&#xff1f;什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式&#xff1f;分别有什么区别&#xff1f;数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引…

log双线性模型log-bilinear model简单概括

LBLM(log-bilinear model)是自然语言处理中的比较简单的模型。LBLM根据上下文的词向量来预测下一个词向量wnw_nwn​&#xff0c;通过对上下文词向量的一个线性组合来表示&#xff1a; rwr_wrw​是一个实数值词向量对于词www对于下一个词的分布计算根据wnw_nwn​预测表示和所有…

9制定项目章程

项目干系人概述 项目主要干系人 项目章程 项目章程的功能 项目章程

【数据结构与算法】栈与队列

栈 一、什么是栈&#xff1f; 1.后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。 2.从栈的操作特性来看&#xff0c;是一种“操作受限”的线性表&#xff0c;只允许在端插入和删除数据。 二、为什么需要栈&#xff1f; 1.栈是一种操作受限的数据结构…

线性代数的本质笔记-更新ing

1. 序言 线性代数不光要会计算&#xff0c;还要理解掌握其几何直观。 2. 向量究竟是什么&#xff1f; 物理学&#xff1a;向量是空间中的箭头&#xff0c;具有长度和方向两个属性。计算机&#xff1a;向量是一个有序数表。比如房屋的参数信息可以根据相关属性按准许列成一个…

10项目开工会

立项启动准备 启动会的任务 如何进行项目启动

[Leetcode][第337题][JAVA][打家劫舍3][递归][动态规划]

【问题描述】[中等] 【解答思路】 1. 动态规划 第 1 步&#xff1a;状态定义 dp[node][j] &#xff1a;这里 node 表示一个结点&#xff0c;以 node 为根结点的树&#xff0c;并且规定了 node 是否偷取能够获得的最大价值。 j 0 表示 node 结点不偷取&#xff1b; j 1 表示…

二元随机变量函数的分布

在前面的文章记录了二元随机变量的定义、离散型二元随机变量的联合分布律/联合概率密度函数、边际分布律/边际概率密度函数、条件分布律/条件概率密度 &#xff0c;以及对应的 联合分布函数、边际分布函数、条件分布函数。这篇文档介绍二元随机变量函数的分布。 二元随机变量函…

第四十期:2019年度十大Web开发趋势

本文和您一起讨论那些本年度改变软件开发行业、特别是Web开发方面的十大趋势。 如今&#xff0c;随着各种新趋势的层出不穷&#xff0c;Web和移动领域的创新不仅改变了人们、乃至整个社会的日常行为习惯、以及业务处理方式&#xff0c;而且也使得开发人员能够轻松、且高效地创建…

【数据结构与算法】排序 冒泡、插入、选择 O(n^2)

冒泡、插入、选择 O(n2) 基于比较 快排、归并 O(nlogn) 基于比较 计数、基数、桶 O(n) 不基于比较 一、如何分析一个排序算法&#xff1f; 学习排序算法的思路&#xff1f;明确原理、掌握实现以及分析性能。如何分析排序算法性能&#xff1f;从执行效率、内存消耗以及稳定性…

[Leetcode][第336题][JAVA][回文对][暴力][HashSet][字典树]

【问题描述】[困难] 【解答思路】 1. 暴力&#xff08;超时&#xff09; 时间复杂度&#xff1a;O(n 2 m)&#xff0c;其中 n 是字符串的数量&#xff0c;m 是字符串的平均长度 空间复杂度&#xff1a;O(1) class Solution {public List<List<Integer>> palindr…

第十二期:面试官问你什么是消息队列?把这篇甩给他!

消息队列不知道大家看到这个词的时候&#xff0c;会不会觉得它是一个比较高端的技术&#xff0c;反正我是觉得它好像是挺牛逼的。 一、什么是消息队列&#xff1f; 消息队列不知道大家看到这个词的时候&#xff0c;会不会觉得它是一个比较高端的技术&#xff0c;反正我是觉得它…

第三章 随机变量的数字特征

数学期望 数学期望用来反映平均情况。 定义 设离散型随机变量X的分布律为P(Xxk)pk,k1,2,3...&#xff0c;若级数∑∞k1xkpk是收敛的&#xff0c;则称级数∑∞k1xkpk的值为随机变量X的数学期望。记为E(X)。E(X)∑k1∞xkpkpk可以理解为加权平均中的权值。数学期望又称为 均值。 …

python二进制、字符编码及文件操作

1. 二进制 bin()十进制转二进制 0b oct&#xff08;&#xff09;十进制转八进制 0o hex&#xff08;&#xff09;十进制转十六进制 0x&#xff0c;4个二进制对应1个16进制&#xff0c;用于网络编程&#xff0c;数据存储 print(int(110111,2)) 55 print(int(ffff,16)) 65535 p…

【数据结构与算法】【字符串匹配】Trie树

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 一、 什么是“Trie树”&#xff1f; 1. 他是一种树形结构&#xff0c;是一种专门处理字符串匹配的数据结构&#xff0c;解决在一组字符串集合中快速查找某个字符串的问题。 2. Trie…