LeetCode:二进制手表【401】

LeetCode:二进制手表【401】

题目描述

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。

每个 LED 代表一个 0 或 1,最低位在右侧。

例如,上面的二进制手表读取 “3:25”。

给定一个非负整数 代表当前 LED 亮着的数量,返回所有可能的时间。

案例:

输入: n = 1
返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

 

注意事项:

  • 输出的顺序没有要求。
  • 小时不会以零开头,比如 “01:00” 是不允许的,应为 “1:00”。
  • 分钟必须由两位数组成,可能会以零开头,比如 “10:2” 是无效的,应为 “10:02”。

题目分析

  这道题目标注为简单题,但感觉做起来比较费劲,虽然最后写出来了,但感觉代码很冗余。讨论有很多非常巧妙的办法,需要运用数学方法,我是绝对想不出来的。

  我的思路是这样的,题目意思是在小时数组{1,2,4,8} 和分钟数组{1,2,4,8,16,32}中一共选择N个数来组成一个时间

  那我们第一个要解决的问题是如何在一个数组中选出所有N个数的组合

  1、如何取出组合的第一个数?

  我们从左往右,首先我们将a加入tmpList(临时存储排列的线性表)中,此后再从它下一个位置开始找第二个、第三个数字,最后生成排列存储在结果中。我们再将1作为第一个元素开始处理后,赶紧把他删了,再将b加入到tmpList中,此后再从它下一个位置开始找第二个、第三个数字,最后生成排列存储在结果中....

  也就是说处理第i个位置的元素时,就要考虑到i位置的所有取值,我们在处理为a的元素后,赶紧把他删了处理为b的元素.....这样第i个位置就有所有的情况了

  

  知道这个以后,我们就可以得到在一个数组中选出所有N个数的组合。

  2、关于排列组合的一个典型的递归回溯框架是这样的

private void backtrack(List<List<Integer>> list, List<Integer> tempList, int [] nums){if(tempList.size() == nums.length){list.add(new ArrayList<>(tempList));} else{for(int i = 0; i < nums.length; i++){if(tempList.contains(nums[i])) continue; // element already exists, skiptempList.add(nums[i]);backtrack(list, tempList, nums);tempList.remove(tempList.size() - 1);}}
}

  当我们分别取出小时和分钟的各种可能情况,再次做他们的笛卡尔积,从而生产所有的时间可能。  

  很抱歉的是,这道题并不需要严格的递归回溯框架,我从而使用了简单使用了深搜。

    /*** * @param arr  待产生排列的数组* @param index 位置下标* @param cur   已经找了CUR个数* @param n     一共要找N个数* @param val   已经找到的数的和* @param res   当招够N个数后把他加入res表中* @param max   val不能超过多少*/private  void helper(int[] arr,int index,int cur,int n,int val,List<Integer> res,int max){if(cur>n)return;if(cur==n&&val<max)res.add(val);for(int i =index;i<arr.length;i++) {helper(arr, i+1,cur+1, n, val + arr[i],res,max);}}

Java题解

class Solution {public List<String> readBinaryWatch(int num) {int[] hour = {1,2,4,8};int[] minute ={1,2,4,8,16,32};List<Integer> hourList = new ArrayList<>();List<Integer> minuteList = new ArrayList<>();List<String>  ans  = new ArrayList<>();for(int i=0;i<=num;i++){helper(hour,0,0,i,0,hourList,12);helper(minute,0,0,num-i,0,minuteList,60);for(int hi = 0;hi<hourList.size();hi++)for(int mi =0;mi<minuteList.size();mi++){String minVal = String.valueOf(minuteList.get(mi));if(minVal.length()<2)minVal = "0"+minVal;ans.add(hourList.get(hi)+":"+minVal);}hourList = new ArrayList<>();minuteList = new ArrayList<>();}Collections.sort(ans);return ans;}private  void helper(int[] arr,int index,int cur,int n,int val,List<Integer> res,int max){if(cur>n)return;if(cur==n&&val<max)res.add(val);for(int i =index;i<arr.length;i++) {helper(arr, i+1,cur+1, n, val + arr[i],res,max);}}}

  

 

转载于:https://www.cnblogs.com/MrSaver/p/9962717.html

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

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

相关文章

反馈电路中相位补偿,到底是什么鬼?

帮朋友做镍氢充电器&#xff0c;利用镍氢电池充满电时电压有一个微小的下降这个特点来识别是否已经充满&#xff0c;比如1.2V的镍氢电池&#xff0c;快充满的时候&#xff0c;电压在1.35V&#xff0c;之后逐步下降&#xff0c;电压可以低于1.30V。所以需要单片机间歇检测电池两…

HTTP代理协议 HTTP/1.1的CONNECT方法

我们平时使用HTTP协议无非就是GET、POST这些方法&#xff0c;但是HTTP的内容远不止那些。今天就来说说HTTP代理使用的CONNECT。这个不是在网页开发上用的&#xff0c;如果没兴趣就跳过吧。   APACHE只是作为网页的服务器被使用的&#xff0c;不会支持这个方法。如果要使用它必…

RoseHA集群:RHEL+RoseMirror+Oracle【2】

博主正在参加“2011年度IT博客大赛”&#xff0c;欢迎帮顶&#xff01; 投票地址 --------------------------------------------- 三&#xff0e;安装Rose Mirror HA&#xff1a;准备工作&#xff1a;在安装 Rose Mirror HA 前检查相应的软件包是否安装&#xff0c;如果没有安…

c语言笔试面试面试题,最新华为c语言笔试面试题

最新华为c语言笔试面试题本文是百分网小编搜索整理的一份最新华为c语言笔试面试题&#xff0c;有需要的朋友们一起看看吧!想了解更多相关信息请持续关注我们应届毕业生考试网!1、局部变量能否和全局变量重名答&#xff1a;能&#xff0c;局部会屏蔽全局。要用全局变量&#xff…

【项目管理】CMMI-需求跟踪矩阵模版

需求菜单/功能模块需求名称需求变更类型&#xff08;新增、修改&#xff09;需求状态&#xff08;已建议、已批准、已设计、已实现、已验证、已删除&#xff09;优先级&#xff08;高、中、低&#xff09;软件需求&#xff08;工作产品、章节号&#xff09;概要设计&#xff08…

嵌入式工程师薪资调查

大家好&#xff0c;嵌入式行业薪资一直是大家关心的问题&#xff0c;刚好我的好朋友发起了一个调查&#xff0c;大家可以匿名写下自己的薪资&#xff0c;也可以看看其他的薪资水平。3月4月份确实是找工作的好机会&#xff0c;求职和跳槽最好的月份要来了吗 &#xff0c;最近看到…

阴阳天

阴阳天——代腾飞 2006年8月5日 于成都成都天气多风云一半风雨一半晴风雨烈日皆独行叫我怎能不生情转载于:https://www.cnblogs.com/daitengfei/archive/2006/08/06/469413.html

c语言密文解密程序,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼加解密处理1、系统的基本功能编写一个对文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密&#xff0c;也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反…

Oracle 制造死锁和查询死锁

制造死锁 创造环境 create table t1_deadlock (a int);create table t2_deadlock (a int); insert into t1_deadlock values (1);insert into t2_deadlock values (2); --第一步update t1_deadlock set a 1000 where a 1; --第二步update t2_deadlock set a 2000 where a 2…

在STM32单片机上跑神经网络算法

摘要&#xff1a;为什么可以在STM32上面跑神经网络&#xff1f;简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化&#xff0c;以支持在嵌入式设备上使用&#xff0c;目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上&#xff0c;支持转化的…

CF Edu54 E. Vasya and a Tree DFS+树状数组

Vasya and a Tree 题意&#xff1a; 给定一棵树&#xff0c;对树有3e5的操作&#xff0c;每次操作为&#xff0c;把树上某个节点的不超过d的子节点都加上值x; 思路&#xff1a; 多开一个vector记录每个点上的操作。dfs这颗树&#xff0c;同时以深度开一个树状数组&#xff0c;踩…

应用框架的设计与实现学习手札系列(持续更新)

应用框架的设计与实现学习手札 类工厂服务 应用框架的设计与实现学习手札之类工厂服务——反射 转载于:https://www.cnblogs.com/stwyhm/archive/2006/08/14/476061.html

通信教程 | 串口丢数据常见的原因

UART&#xff1a;Universal Asynchronous Receiver / Transmitter&#xff0c;通用异步收发传输器&#xff0c;即我们通常说的串口。串口是工程师最常用的串行外设之一&#xff0c;但在实际应用中还是会经常遇到各种问题。比如&#xff1a;丢失一字节数据。今天我们就结合STM32…

电脑无法启动故障的10种解决方法

电脑无法启动故障的10种解决方法 开机自检时出现问题后会出现各种各样的英文短句&#xff0c;短句中包含了非常重要的信息&#xff0c;读懂这些信息可以自己解决一些小问题&#xff0c;可是这些英文难倒了一部分朋友&#xff0c;下面是一些常见的BIOS短句的解释&#xff0c;大家…

三次握手 四次握手 与socket函数的关系

我们深谙信息交流的价值&#xff0c;那网络中进程之间如何通信&#xff0c;如我们每天打开浏览器浏览网页时&#xff0c;浏览器的进程怎么与web服务器通信的&#xff1f;当你用QQ聊天时&#xff0c;QQ进程怎么与服务器或你好友所在的QQ进程通信&#xff1f;这些都得靠socket&am…

110-简单类型之整数类型和小数类型

简单类型-整数 简单类型-小数 float myFloat12.5f;转载于:https://www.cnblogs.com/wuxiaohui1983/p/9965493.html

c语言 修改密码源码,基于51单片机串口密码修改设计-(源码+电路图)

名称&#xff1a;多功能电子密码锁(使用STM32平台 使用 keiluvision软件&#xff0c;用C语言写代码)系统由STM32单片机核心板电路、7位按键电路、串口电路、电源电路、液晶1602电路、继电器模块电路和LED灯指示电路组成。具体功能&#xff1a;①系统中有3组正确密码&#xff0c…

看了2022华为春季发布会

我之前在一家智能家居的公司干过&#xff0c;而且我是从0开始做的&#xff0c;所以对这个行业多少还是有点了解&#xff0c;我从技术人角度看一下这场发布会。看到了智能家居的几个产品&#xff0c;然后再想起来我们之前做的东西&#xff0c;嗯&#xff0c;感觉我们做的提前做了…

BackGroundWorker用法

在编程中经常会遇到在一个按钮中执行复杂操作&#xff0c;并将复杂操作最后返回的值加入一个ListView或ComboBox中候选。这个时候程序会卡&#xff0c;当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作时出现“线程间操作无效: 从不是创建控件的线程访问它”异常。 …

观易先生品三国

今天下了 易中天 易先生的品三国看了第一集 才知三国演义对三国历史曲解多深另外看到一副 剃头师傅的对联 颇有意思说是以关羽为祖师爷 颇有关羽的口气看天下头颅几许 看老夫手段如何转载于:https://www.cnblogs.com/slightboy/archive/2006/08/19/481439.html