【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指令的作用
一,栈 (一)栈的特点 栈是一种具有特殊访问方式的存储空间,特殊在于,进出这块存储空间的数据,“先进后出,后进先出” 由于栈的这个“先进后出”的特点,我们可以利用其来很好的操作内…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
