[LeetCode]401. Binary Watch(二进制手表)

自制二进制电子手表 二进制显示手表,arduino工程文件,gerber文件,自行焊接 立即下载

401. Binary Watch

原题地址
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).
原题图片
Each LED represents a zero or one, with the least significant bit on the right.

For example, the above binary watch reads “3:25”.

Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.

Example:

Input: n = 1
Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

Note:

  1. The order of output does not matter.输出顺序不影响
  2. The hour must not contain a leading zero, for example “01:00” is not valid, it should be “1:00”.
  3. The minute must be consist of two digits and may contain a leading zero, for example “10:2” is not valid, it should be “10:02”.

题目大意:

二进制手表,上面一排代表小时,下面一排代表分钟
给一个整数代表LED灯亮的个数,返回一个字符串数组,显示所有可能的时间,时间格式注意Note的2,3

我的思路:

  • 首先先明白二进制手表的含义,把1,2,4,8转化为四位的二进制就是0001, 0010, 0100,1000, 9点时亮1和8,是1001。分钟数也是同理。
  • 其次表示小时的数值只有0-11,表示分钟的数值只有0-59。先分别对小时跟分钟的数值进行预处理,按照包含而二进制中包含1的个数分开保存小时数值的字符串跟分钟数值的字符串。
  • 以小时为例,小时使用4个位表示,最少包含0个1,最多包含3个1,所以用vector《vector《string》》 hours(4)建立一个包含4个vector的vector数组,hours[0]保存着0个1的数值对应的字符串”0”,hours[1]保存着有1个1的数值对应的字符串,即”1”,”2”,”4”,”8”,hours[2]保存着”3”,”5”,”6”,”9”,”10”,hours[3]保存着”7”,”11”。 定义numOfRow()处理这种情况
  • 读入num是LED灯亮的总个数,即小时和分钟的二进制中1的总个数
  • 小时表示亮灯个数h范围是0~3,分钟表示亮灯个数m范围是0~5,同时m = num -h
  • 定义一个字符串数组times,从h=0开始,在满足m=num -h<6和h<4的情况下,将所有可能的情况拼接成字符串,加入到times中,最后返回times

代码如下:

#include <iostream>
#include <vector>
#include <string>

using namespace std;
class Solution {
public:
    vector<string> readBinaryWatch(int num) {
        vector<string> times;
        if(num<0 || num>8)
            return times;
        vector<vector <int>> hours(4);
        vector<vector <int>> minutes(6);
        for(int i=0; i<12; i++){
            hours[numOfRow(i)].push_back(i);
        }
        for(int j=0; j<60; j++){
            minutes[numOfRow(j)].push_back(j);
        }
        for(int h=0; h<4&&h<=num; h++){
            if(num-h<6){
                for(int H: hours[h]){
                    for(int M: minutes[num-h]){
                        string time = M<10 ? ":0" : ":";
                        times.push_back(to_string(H) + time + to_string(M));
                    }
                }
            }
        }
        return times;
    }
    int numOfRow(int num){
        int Count = 0;
        while(num != 0){
            if(num%2 == 1)
                Count++;
            num /= 2;
        }
        return Count;
    }
};
int main()
{
    Solution a;
    int num = 0;
    cin >> num;
    vector<string> times = a.readBinaryWatch(num);
    for(int t=0; t<times.size(); t++)
        cout << times[t] << endl;
    return 0;
}

思路2:

  • 看到discuss有用bitset的,专门跑去学习一下bitset用法
  • 附上链接一,链接二
  • 挺方便的,效率也比我暴力解出来的高

    代码如下:

#include <bitset>

vector<string> readBinaryWatch1(int num) {//bitset STL模板
        vector<string> times;
        for (int i = 0; i < 12; i++) {
            bitset<4> h(i);//4位的二进制数
            for (int j = 0; j < 60; j++) {
                bitset<6> m(j);//6位的二进制数
                if (h.count() + m.count() == num)//h.count()函数判断h中1的个数
                    times.push_back(to_string(i) + (j < 10? ":0": ":") + to_string(j));
            }
        }
        return times;
    }

另外,看到还有用动态规划的,附上链接,以供参考!

  1. 链接一
  2. 链接二
  3. 链接三
windows10下Boost的安装与初试 https://blog.csdn.net/s_lisheng/article/details/72871218 https://blog.csdn.net/yockie/article/details/8856190?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.vipsorttest&depth_1-utm_source=dis 阅读详情

相关推荐

如何找回mysql删除的表_mysql误删表如何恢复,恢复被删除表的步骤说明

小编寄语想必大家都知道,Oracle ACE李真旭(Roger)是国内最专业的Oracle 数据库恢复专家。但知识都是触类旁通,真正的专家,从来不会局限在一个方向上。今天分享的内容,是他在MySQL数据恢复上所做的尝试。本文主要分享在没有备份的情况下,MySQL数据库如何恢复被删除的表。包含两个主要的场景:1、drop table后的恢复2、truncate table后的恢复正文:我们都知道,M...

weixin_35725389的博客 6783

LeetCode 0401. 二进制手表 - 两种方法详解

LeetCode 0401. 二进制手表 - 两种方法详解 二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。 给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。

<font color="Pink">Tisfy的博客</font> 1369

相机基础知识讲解:CMOS和CCD

相机基础知识讲解:CMOS和CCD

Coppa的博客 5万+

二进制手表(简单)

表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。每个 LED 代表一个 0 或 1,最低位在右侧。二进制手表顶部有 4 个 LED 代表。,底部的 6 个 LED 代表。

qq_52954114的博客 682

Python地理空间数据库之geopandas使用详解

地理空间数据分析在许多领域中都有着广泛的应用,包括地理信息系统(GIS)、城市规划、环境科学、地质勘探等。Python GeoPandas是一个强大的库,旨在简化地理空间数据的处理和分析。本文将深入介绍GeoPandas库,包括其基本概念、功能特性、示例代码以及在实际应用中的应用场景。

Rocky006的博客 1万+

到底是什么决定了二极管的最高工作频率?

硬件工程师,应该都用过二极管的吧,不过也许有一个误区,大多数人可能并不知道,或者说是理解有问题,下面就来细细说下。 一个问题 先提一个问题:到底是什么决定了二极管的最高工作频率? 估计有不少人会回答是二极管反向恢复时间Trr,也有人会说是二极管结电容,那到底谁是对的呢?或者说都一样,反向恢复时间由结电容决定? 到底什么决定了二极管的最高工作频率,我们暂且不论,不过需要知道的是,二极管的反向恢复时间和结电容根本就是两回事,反向恢复时间绝不能等同于结电容的充放电时间。 为什么我这么说呢?.

weixin_42005993的博客 4831

力扣 401. 二进制手表(简单)

题目 二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。 例如,下面的二进制手表读取 “3:25” 。 给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。 小时不会以零开头: 例如,“01:00” 是无效的时间,正确的写法应该是 “1:00” 。 分钟必须由两位数组成,可能会以零开头: 例如,“10:2” 是无效

毛毛的博客 472

大模型在心律失常预测及治疗方案制定中的应用研究报告

目录一、引言1.1 研究背景与意义1.2 研究目的与方法1.3 研究创新点二、大模型技术概述2.1 大模型基本原理2.2 常见大模型类型及特点2.3 大模型在医疗领域的应用现状三、心律失常的术前预测与准备3.1 术前心律失常预测的重要性3.2 大模型在术前预测中的应用案例3.3 基于预测结果的术前准备方案四、术中监测与实时调整4.1 术中监测心律失常的方法与技术4.2 大模型辅助术中决策的机制4.3 实时调整手术方案的策略与实践五、术后恢复与并发症风险预测5.1 术后心律失常的监测与评估5.2 大模型预测术

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1595

Leetcode 401:二进制手表(最详细的解法!!!)

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。 例如,上面的二进制手表读取 “3:25”。 给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。 案例: 输入: n = 1 返回: [&amp;quot;1:00&amp;quot;, &amp;quot;2:00&amp;quot;

coordinate的博客 2714

Webots+UR机械臂仿真全流程:手把手教你用Python实现Pick-and-Place轨迹规划

本文详细介绍了使用Webots和Python实现UR六自由度机械臂的Pick-and-Place轨迹规划全流程。从环境搭建、运动学正逆解计算到轨迹规划实战技巧,涵盖工业场景中的关节补偿、末端校准等实际问题解决方案,帮助开发者快速掌握机械臂精准控制技术。

weixin_29083649的博客 282

基于Simulink与MATLAB的七轴OpenArm机械臂逆运动学仿真与轨迹规划完整指南

本文详细介绍了七自由度OpenArm机械臂在MATLAB/Simulink环境下的运动学仿真与轨迹规划实现方法。首先建立了机械臂的DH参数模型,验证了正运动学计算;随后提出了两种逆运动学求解算法(数值迭代法和臂型角参数化解析法)的MATLAB实现方案;最后在Simulink中搭建了完整的轨迹规划与控制系统。研究解决了七自由度冗余机械臂特有的多解性、奇异性和关节限位约束等核心问题,为OpenArm机械臂的运动控制提供了完整的技术方案和可运行代码实现。

AI的内部世界的博客 678

LeetCode 401. 二进制手表(二进制枚举)

401. 二进制手表 二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。 例如,上面的二进制手表读取 “3:25”。 给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。 示例 : 输入: n = 1 返回: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]

LittleTime_cc的博客 436

AUTOSAR从入门到精通-诊断事件管理模块(DEM)(四)

在 Autosar 中,诊断事件是指在车辆电子系统中发生的特定事件,可以用于诊断和故障排除。DEM模块通过EventId和相关的EventName来表示每个诊断事件。诊断事件的状态代表了监控器的结果,DEM模块通过RTE或其他BSW模块从SW-C接收监控器的结果。DEM模块使用EventId来管理系统中每个诊断事件的状态,并对各个测试结果执行所需的操作,例如存储冻结帧/拓展帧。所有监控器和BSW模块使用EventId作为符号化的EventName来管理诊断事件。

getusushu的博客 1508

Leetcode401Binary Watch二进制手表

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。 给定一个非负整数n代表当前 LED 亮着的数量,返回所有可能的时间。 案例: 输入: n = 1 返回: ["1:00", "2:00", "4:00", "8:00", "0:01"...

Ha12312的博客 170

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode 401. Binary Watch二进制手表

leetcode 401. Binary Watch二进制手表

Shauna_Wu的博客 991

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

leetcode 401. 二进制手表(Binary Watch)

目录 题目描述: 示例: 解法: 题目描述: 二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。 例如,上面的二进制手表读取 “3:25”。 给定一个非负整数 n 代表当前 LE...

weixin_30916125的博客 135

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LeetCode - 401 - 二进制手表(binary-watch)

Create by jsliang on 2019-7-24 08:26:472019-7-24 21:51:59一 目录不折腾的前端,和咸鱼有什么区别| 目录 | | ...

weixin_41806099的博客 300

LeetCode(401):二进制手表 Binary Watch(Java)

2021.1.11 LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 可以有两种思路: 1.遍历所有符合要求的时间,统计二进制中1的个数,把个数等于num的时间筛选出来。 2.回溯法遍历所有LED,记录符合条件的时间。 传送门:二进制手表 A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 L

NJU_ChopinXBP的博客 317

【leetcode刷题】[简单]401. 二进制手表(binary watch)-java

二进制手表 binary watch题目分析解答 题目 二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。 例如,上面的二进制手表读取 “3:25”。 给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。 案例: 输入: n = 1 返回: ["1:00", "2:00",...

mikuluna的博客 612

leetcode_[python/java/javascript/C++]_401_Binary Watch(二进制手表)

题目链接 【题目】 A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59). Each LED represents a zero or one, with the least signifi

Mosen 881

[Swift]LeetCode401. 二进制手表 | Binary Watch

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30379911的博客 130

LeetCode 401. Binary Watch 解题报告

LeetCode 401. Binary Watch 解题报告

骆小坑的填坑之旅 3262

LeetCode //C - 401. Binary Watch

【代码】LeetCode //C - 401. Binary Watch。

Made in Code 1246

LeetCode 401. Binary Watch 题解(C++)

LeetCode 401. Binary Watch 题解(C++)题目描述 A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59). Each LED represents a zero or on

prayyojay的博客 1447

【Leetcode】401. Binary Watch

题目链接:https://leetcode.com/contest/5/problems/binary-watch/题目: A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).Each LED

业精于勤,荒于嬉 3231

Leetcode 401. Binary Watch 二进制的表 解题报告

1 解题思想这道题就是说,有一个表是用二进制表示 4位表示小时 6位表示分钟 亮起来的地方表示1,反之则是0.现在问说,如果这个表一共亮了n个灯,问可能有多少可能的时间组合呢?其实这道题就只能搜索,搜索和不断验证每种可能了~~ 因为是easy难度,所以主要参考了讨论中的2 原题A binary watch has 4 LEDs on the top which represent the

MebiuW的专栏 5050
上一篇: [LeetCode]566. Reshape the Matrix(重塑矩阵)
下一篇: [LeetCode]206. Reverse Linked List(反转单链表)
whl_program
博客等级 码龄11年 101粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值