题目

二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。

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

(图源:WikiMedia - Binary clock samui moon.jpg ,许可协议:Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) )

给你一个整数 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

解题思路

时间由两个部分组成

  • 小时(0-11)
  • 分钟(0-59)
    手表当前亮着的 LED 的数量,可以看成是二进制表示中1的个数,
    因此使用两个二进制数分别表示小时和分钟,它们二进制表示中的1的个数等于turnedOn
  1. 遍历0-59,使用map记录二进制中1的个数和对应分钟的映射,
  2. 遍历0-11,计算当前小时对应的元素已经占用了多少个1,记作cur,那么分钟只能有turnedOn-cur个1,使用map可以快速找出二进制表示中1的个数为turnedOn-cur的分钟数,再进行组合。

代码

class Solution {public List<String> readBinaryWatch(int turnedOn) {List<String> res=new ArrayList<>();Map<Integer,List<Integer>> min=new HashMap<>();for (int i=0;i<60;i++){int cur=Integer.bitCount(i);if(!min.containsKey(cur))min.put(cur,new ArrayList<>());min.get(cur).add(i);}for (int i=0;i<=11;i++){int cur=Integer.bitCount(i);if(cur>=4||!min.containsKey(turnedOn-cur))continue;List<Integer> mi = min.get(turnedOn-cur);for (int k = 0; k < mi.size(); k++) {res.add(String.format("%d:%02d",i,mi.get(k)));}}return res;}
}

leetcode 1239. 串联字符串的最大长度相关推荐

  1. LeetCode 1239. 串联字符串的最大长度(回溯/动态规划)

    文章目录 1. 题目 2. 解题 2.1 回溯超时解 2.2 回溯优化 2.3 动态规划 1. 题目 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s ...

  2. leetcode 1239. Maximum Length of a Concatenated String with Unique Characters | 1239. 串联字符串的最大长度(回溯)

    题目 https://leetcode.com/problems/contiguous-array/ 题解 回溯法,每个字符串都有可能加或者不加. class Solution {int N;publ ...

  3. LeetCode实战:字符串相乘

    题目英文 Given two non-negative integers num1 and num2 represented as strings, return the product of num ...

  4. LeetCode实战:字符串相加

    题目英文 Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and ...

  5. LeetCode 30串联所有单词的子串31下一个排列

    标题 串联所有单词得字串 下一个排列 维护真的不易,如有帮助还请点赞关注,关注公众号bigsai回复进群即可加入打卡. 串联所有单词得字串 题目描述: 给定一个字符串 s 和一些长度相同的单词 wor ...

  6. leetcode 344. 反转字符串 541. 反转字符串 II 双指针解

    目录 leetcode 344.反转字符串 1.题目 2.思考 leetcode 541. 反转字符串 II 1.题目 2.思考 leetcode 344.反转字符串 1.题目 2.思考 典型的双指针 ...

  7. LeetCode 6036. 构造字符串的总得分和

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   你需要从空字符串开始 ...

  8. LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)

    LeetCode--1849. 将字符串拆分为递减的连续值[Splitting a String Into Descending Consecutive Values][中等]--分析及代码[Java ...

  9. LeetCode 0481. 神奇字符串

    [LetMeFly]481.神奇字符串 力扣题目链接:https://leetcode.cn/problems/magical-string/ 神奇字符串 s 仅由 '1' 和 '2' 组成,并需要遵 ...

最新文章

  1. 美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?
  2. “自由主义教皇” 、​Linux 之父的封神之路
  3. 《分布式系统:概念与设计》一1.6 实例研究:万维网
  4. 正则判断 手机邮箱的正确格式
  5. 百度地图API之MyLocationOverlay的使用(Android)
  6. Qt / 窗体设置 Qt::WA_TranslucentBackground 为全黑的原因
  7. wincc 报警记录 mysql_如何才能把WINCC报警记录中的数据通过SQL取上来-工业支持中心-西门子中国...
  8. centos 6.6 oracle 10g,centos 6.2 安装 oracle 10g 问题
  9. Oracle正则表达式的用法
  10. vue+axios方法封装(restful,ajax)
  11. linux从usb安装软件,Linux下USB Camera的安装和使用
  12. mysql文件扩展名查询_如何通过MySQL查询获取文件的文件扩展名?
  13. java 常用富文本编辑器_常用的六个富文本编辑器
  14. [文章]Android不流畅,究其本质
  15. 《Linux就是这种范儿》读后感
  16. 迅雷看看引领高清内容多屏合一新趋势
  17. k8s学习-污点和容忍(概念、模版、创建、删除)
  18. 511遇见易语言注册调用乐玩插件类模块封装
  19. 「Gitee篇」如何用Git平台账号登录建木CI
  20. storyboard 苹果启动图_iOS平台自定义storyboard启动界面

热门文章

  1. Java集合(六):专用集合和遗留类
  2. Scala连接mongodb数据库
  3. mysql数据库连接失败,挑战大厂重燃激情!
  4. tableau地图城市数据_Tableau 地图 | 无法识别的城市
  5. 树莓派pwm驱动好盈电调及伺服电机
  6. [JS 分析] 天_眼_查 字体文件
  7. NHibernate自定义集合类型(上):基本实现方式
  8. vue打包后放在 nginx部署时候的配置文件
  9. linux 下mysql等php的安装 lnmp
  10. RUNOOB python练习题25 递归实现阶乘