【LeetCode每日一题】——401.二进制手表
文章目录
- 一【题目类别】
- 二【题目难度】
- 三【题目编号】
- 四【题目描述】
- 五【题目示例】
- 六【题目提示】
- 七【解题思路】
- 八【时间频度】
- 九【代码实现】
- 十【提交结果】
一【题目类别】
- 回溯
二【题目难度】
- 简单
三【题目编号】
- 401.二进制手表
四【题目描述】
- 二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。
- 例如,下面的二进制手表读取
"4:51"
。
- 给你一个整数
turnedOn
,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。 - 小时不会以零开头:
- 例如,
"01:00"
是无效的时间,正确的写法应该是"1:00"
。
- 例如,
- 分钟必须由两位数组成,可能会以零开头:
- 例如,
"10:2"
是无效的时间,正确的写法应该是"10:02"
。
- 例如,
五【题目示例】
-
示例 1:
- 输入:turnedOn = 1
- 输出:[“0:01”,“0:02”,“0:04”,“0:08”,“0:16”,“0:32”,“1:00”,“2:00”,“4:00”,“8:00”]
-
示例 2:
- 输入:turnedOn = 9
- 输出:[]
六【题目提示】
0 <= turnedOn <= 10
七【解题思路】
- 该题目很容易想到使用回溯+剪枝来解决
- 我们需要在10个灯中选择n个灯点亮,并计算其时间和,需要注意要判断该时间和是否合理,如果不合理(小时超过11,分钟超过59)需要进行剪枝
- 上面提到“选择n个灯点亮”,我们肯定不能一起全部点亮,所以需要用到回溯,一个一个选择,还可以进行不同的组合
- 为了实现“选择n个灯点亮”,我们可以设置小时数组和分钟数组,长度为10,不足10位补零,目的是使用这两个数组来模拟小时和分钟的亮灯情况(数组索引选中的值即为亮的灯)
- 具体实现可以参考下面的代码,最后按照回溯+剪枝的方法将结果计算出并返回即可
八【时间频度】
- 时间复杂度: O ( C 10 n ) O(C_{10}^{n}) O(C10n), n n n为传入的参数值
- 空间复杂度: O ( n ) O(n) O(n), n n n为传入的参数值
九【代码实现】
- Java语言版
class Solution {public List<String> readBinaryWatch(int turnedOn) {// 定义时间数组int[] hours = {1, 2, 4, 8, 0, 0, 0, 0, 0, 0};int[] minutes = {0, 0, 0, 0, 1, 2, 4, 8, 16, 32};// 定义结果列表List<String> res = new ArrayList<>();// 回溯计算可能的时间组合backtrack(turnedOn, 0, 0, 0, res, hours, minutes);// 返回结果return res;}private void backtrack(int count, int index, int hour, int minute, List<String> res, int[] hours, int[] minutes) {if (hour > 11 || minute > 59) {return;}if (count == 0) {res.add(String.format("%d:%02d", hour, minute));}for (int i = index; i < 10; i++) {backtrack(count - 1, i + 1, hour + hours[i], minute + minutes[i], res, hours, minutes);}}
}
- Python语言版
class Solution:def readBinaryWatch(self, turnedOn: int) -> List[str]:# 定义时间数组hours = [1, 2, 4, 8, 0, 0, 0, 0, 0, 0]minutes = [0, 0, 0, 0, 1, 2, 4, 8, 16, 32]# 定义结果列表res = []# 回溯计算可能的时间组合def backtrack(count, index, hour, minute):if hour > 11 or minute > 59:returnif count == 0:res.append("%d:%02d" % (hour, minute))returnfor i in range(index, 10):backtrack(count - 1, i + 1, hour + hours[i], minute + minutes[i])backtrack(turnedOn, 0, 0, 0)# 返回结果return res
- C语言版
/*** Note: The returned array must be malloced, assume caller calls free().*/#define MAX_RES_SIZE 256// 定义回调函数来递归查找所有可能的时间组合
void backtrack(int count, int index, int hour, int minute, char res[MAX_RES_SIZE][6], int *returnSize, int * hours, int *minutes)
{if (hour > 11 || minute > 59){return;}if (count == 0){sprintf(res[*returnSize], "%d:%02d", hour, minute);(*returnSize)++;return;}for (int i = index; i < 10; i++){backtrack(count - 1, i + 1, hour + hours[i], minute + minutes[i], res, returnSize, hours, minutes);}
}char** readBinaryWatch(int turnedOn, int* returnSize)
{// 定义时间数组int hours[] = {1, 2, 4, 8, 0, 0, 0, 0, 0, 0};int minutes[] = {0, 0, 0, 0, 1, 2, 4, 8, 16, 32};// 分配空间用于存储结果char (*res)[6] = malloc(MAX_RES_SIZE * sizeof(*res));*returnSize = 0;// 开始递归backtrack(turnedOn, 0, 0, 0, res, returnSize, hours, minutes);// 转换为char**返回char** finRes = malloc(*returnSize * sizeof(char*));for (int i = 0; i < *returnSize; i++){finRes[i] = res[i];}return finRes;
}
十【提交结果】
-
Java语言版
-
Python语言版
-
C语言版
相关文章:

【LeetCode每日一题】——401.二进制手表
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 简单 三【题目编号】 401.二进制手表 四【题目描述】 二进制手表顶部…...

ROM和RAM的区别
ROM(Read-Only Memory,只读存储器)和RAM(Random Access Memory,随机存取存储器)是计算机系统中两种不同类型的存储技术,它们在功能、用途和特性上有显著的区别: 1. 存储数据的持久性…...

tomcat的配置
tomcat8最佳配置 <Executor name"tomcatThreadPool" namePrefix"catalina-exec-"maxThreads"500" minSpareThreads"100" prestartminSpareThreads"true"/><Connector executor"tomcatThreadPool" port&…...

SQL使用IN进行分组统计时如何将不存在的字段显示为0
这两天被扔过来一个脏活儿:做一个试点运行系统的运营指标统计。 活儿之所以称为“脏”,是因为要统计8家单位共12个项目的指标。而每个项目有3个用户类指标,以及分17个功能模块,每个功能模块又分5个维度的指标。也就是单个项目是1…...

MoCo对比损失
MoCo(Momentum Contrast,动量对比学习)是一种自监督学习方法,由Facebook AI Research提出,主要用于无监督学习视觉表示。在MoCo中,对比损失(Contrastive Loss)扮演着至关重要的角色&…...

01_WebRtc_一对一视频通话
文章目录 通话网页的设计客户端实现Web的API 服务端实现 2024-9-20 很久没有写博客啦,回顾总结这段时间的成果, 写下博客放松下(开始偷懒啦)主要内容:实现网页(html)打开摄像头并显示到页面需要…...

【小程序 - 大智慧】深入微信小程序的渲染周期
目录 前言应用生命周期页面的生命周期组件的生命周期渲染顺序页面路由运行机制更新机制同步更新异步更新 前言 跟 Vue、React 框架一样,微信小程序框架也存在生命周期,实质也是一堆会在特定时期执行的函数。 小程序中,生命周期主要分成了三…...

《深入了解 Linux 操作系统》
在计算机领域中,Linux 作为一种强大而重要的操作系统,有着广泛的应用场景,尤其在服务器端占据着举足轻重的地位。 一、Linux 简介 Linux 是一种操作系统,主要应用于服务器端。不同的厂商或个人会对 Linux 的内核进行封装ÿ…...

批评他人也需要技术
俗话说“人无完人,尺有所短,寸有所长”,每个人都有可能犯错误。我们犯错误,并不能说明我们一无是处;一个人做了一件好事,也不能说他做的每件事都是好的。 营造良好的氛围。一说到批评,我们许多…...

安装SQL Server遇到的问题
出现了一和二的问题,最后还是通过三完全卸载sqlserver安装成功了 一.安装过程中依次报错 1.MOF编译器无法连接WMI服务器。原因可能是语义错误(例如,与现有WMI知识库不兼容)或实际错误(例如WMI服务器启动失败)。 2.PerfLib 2.0计数器removal失败…...

java项目之编程训练系统源码(springboot)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 编程训练系统的主要使用者管…...

MySQL的登陆错误:ERROR 1049 (42000): Unknown database ‘root‘
MySQL的登陆错误:ERROR 1049 (42000): Unknown database ‘root’ 安装MySQL的时候,到网上查的命令行登陆MySQL的方法都是mysql -u root -p password mysql -r root -p 123456但是奇怪的是这条命令我输进去死活都不对,它都会要求再输入一遍…...

vue使用vue-i18n实现国际化
我使用的是vue2.6版本,具体使用其他版本可以进行修改 一、安装 npm install vue-i18n -D 二、配置 1、文件配置 ①在src下创建 i18n 目录 ②在 i18n 目录下创建 langs 文件夹 和 index.js文件,具体如下 2、index.js代码如下,这里使用了…...

微信小程序如何设置左侧导航栏跟随页面滑动
一、使用 scroll-view 组件实现页面滚动 在页面的 wxml 文件中,将需要滚动的内容包裹在scroll - view组件内,例如: <scroll-view scroll-y"true" style"height: 800rpx;"><!-- 这里放置页面的主要内容 -->…...

个人小结(2.0)
离谱,困扰着几周的问题今天偶然发现了解决方法。 问题如下:就是对应的模块引入爆红,但是单击进入引入的文件没有问题 然后它的提示是: 无法找到模块“../views/screen/index.vue”的声明文件。“c:/Users/10834/Desktop/0716_pro…...

探索自动化的魔法:Python中的pyautogui库
文章目录 探索自动化的魔法:Python中的 pyautogui 库背景:为什么选择pyautogui?pyautogui是什么?如何安装pyautogui?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索自动化的魔法:Python中的 …...

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
一、本文介绍 本文记录的是利用GsConv优化YOLOv9的颈部网络。深度可分离卷积(DSC)在轻量级模型中被广泛使用,但其在计算过程中会分离输入图像的通道信息,导致特征表示能力明显低于标准卷积(SC),…...

EasyExcel的基本使用——Java导入Excel数据
使用EasyExcel导入Excel数据有两种方式 无论哪种方式我们都需要建立Excel表格和Java对象的绑定 首先我们需要根据Excel表头定义一个对应的类 excel表示例: 对应的类: 使用ExcelProperty将excel列名和字段名绑定,括号里面填列名 package co…...

Apache Iceberg 试用
启动 spark-sql 因为 iceberg 相关的 jars 已经在 ${SPARK_HOME}/jars 目录,所以不用 --jars 或者 --package 参数。 spark-sql --master local[1] \--conf spark.sql.extensionsorg.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \--conf spar…...

速通汇编(六)认识栈,SS、SP寄存器,push和pop指令的作用
一,栈 (一)栈的特点 栈是一种具有特殊访问方式的存储空间,特殊在于,进出这块存储空间的数据,“先进后出,后进先出” 由于栈的这个“先进后出”的特点,我们可以利用其来很好的操作内…...

【Python机器学习】NLP信息提取——值得提取的信息
目录 提取GPS信息 提取日期 如下一些关键的定量信息值得“手写”正则表达式: GPS位置;日期;价格;数字。 和上述可以通过正则表达式轻松捕获的信息相比,其他一些重要的自然语言信息需要更复杂的模式: 问…...

代理IP批理检测工具,支持socks5,socks4,http和https代理批量检测是否可用
代理IP批理检测工具,支持socks5,socks4,http和https代理批量检测是否可用 工具使用c编写: 支持ipv4及ipv6代理服务器。 支持http https socks4及socks5代理的批量检测。 支持所有windows版本运行! 导入方式支持手工选择文件及拖放文件。 导入格式支持三…...

AI视觉算法盒是什么?如何智能化升级网络摄像机,守护全方位安全
在智能化浪潮席卷全球的今天,以其创新技术引领行业变革,推出的集高效、智能、灵活于一体的AI视觉算法盒。这款革命性的产品,旨在通过智能化升级传统网络摄像机,为各行各业提供前所未有的安全监控与智能分析能力,让安全…...

【Vue】VueRouter路由
系列文章目录 第七章 VueRouter路由 文章目录 系列文章目录第一节:VueRouter基础一、安装:二、基本使用:1. 创建路由代码:Single Page Application:SPA2. 使用路由3. 展示路由: 二、嵌套路由三、路由传参1…...

idea多模块启动
文章目录 idea多模块启动2018版本的idea2019版本的idea idea多模块启动 2018版本的idea 1.首先看一下view> Tool Windows下有没有Run Dashboard 如果有,点击一下底部的窗口就会出现 如果不存在,执行下一步 2.查看自己项目的工作空间位置 点击 File&…...

23:SPI二:W25Q64存储器模块的使用
W25Q64存储器模块的使用 1、W25Q64的简介2、模块内部结构2.1:引脚结构2.2:内部存储结构2.3:此模块的注意事项 3、程序模拟SPI读写W25Q644、片上外设SPI读写W25Q64 1、W25Q64的简介 其中最主要的特点就是掉电不丢失。 由上图所示:…...

论文解读《COMMA: Co-articulated Multi-Modal Learning》
系列文章目录 文章目录 系列文章目录论文细节理解1. 研究背景2. 论文贡献3. 方法框架4. 研究思路5. 实验6. 限制结论 论文细节理解 这段话中,the vision branch is uni-directionally influenced by the text branch only 什么意思?具体举例一下 以下是…...

10款电脑加密软件超好用推荐|2024年常用电脑加密软件排行榜
随着数据隐私和信息安全意识的增强,电脑加密软件已成为日常工作和个人生活中不可或缺的工具之一。无论是保护公司机密文件,还是保障个人数据的安全,合适的加密软件都能提供强有力的保护。本文将推荐2024年超好用的10款电脑加密软件࿰…...

用户态缓存:环形缓冲区(Ring Buffer)
目录 环形缓冲区(Ring Buffer)简介 为什么选择环形缓冲区? 代码解析 1. 头文件与类型定义 1.1 头文件保护符 1.2 包含必要的标准库 1.3 类型定义 2. 环形缓冲区结构体 2.1 结构体成员解释 3. 辅助宏与内联函数 3.1 min 宏 3.2 is…...

Harmony应用 ArkTs AES 加密方法之GCM对称加密
加解密介绍 在数据存储或传输场景中,可以使用加解密操作用于保证数据的机密性,防止敏感数据泄露。 使用加解密操作中,典型的场景有: 使用对称密钥的加解密操作。 使用非对称密钥的加解密操作。 使用RSA(PKCS1_OAEP…...