leetcode 1239. 串联字符串的最大长度
题目
二进制手表顶部有 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
- 遍历0-59,使用map记录二进制中1的个数和对应分钟的映射,
- 遍历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. 串联字符串的最大长度相关推荐
- LeetCode 1239. 串联字符串的最大长度(回溯/动态规划)
文章目录 1. 题目 2. 解题 2.1 回溯超时解 2.2 回溯优化 2.3 动态规划 1. 题目 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s ...
- leetcode 1239. Maximum Length of a Concatenated String with Unique Characters | 1239. 串联字符串的最大长度(回溯)
题目 https://leetcode.com/problems/contiguous-array/ 题解 回溯法,每个字符串都有可能加或者不加. class Solution {int N;publ ...
- LeetCode实战:字符串相乘
题目英文 Given two non-negative integers num1 and num2 represented as strings, return the product of num ...
- LeetCode实战:字符串相加
题目英文 Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and ...
- LeetCode 30串联所有单词的子串31下一个排列
标题 串联所有单词得字串 下一个排列 维护真的不易,如有帮助还请点赞关注,关注公众号bigsai回复进群即可加入打卡. 串联所有单词得字串 题目描述: 给定一个字符串 s 和一些长度相同的单词 wor ...
- leetcode 344. 反转字符串 541. 反转字符串 II 双指针解
目录 leetcode 344.反转字符串 1.题目 2.思考 leetcode 541. 反转字符串 II 1.题目 2.思考 leetcode 344.反转字符串 1.题目 2.思考 典型的双指针 ...
- LeetCode 6036. 构造字符串的总得分和
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 你需要从空字符串开始 ...
- LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)
LeetCode--1849. 将字符串拆分为递减的连续值[Splitting a String Into Descending Consecutive Values][中等]--分析及代码[Java ...
- LeetCode 0481. 神奇字符串
[LetMeFly]481.神奇字符串 力扣题目链接:https://leetcode.cn/problems/magical-string/ 神奇字符串 s 仅由 '1' 和 '2' 组成,并需要遵 ...
最新文章
- 美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?
- “自由主义教皇” 、​Linux 之父的封神之路
- 《分布式系统:概念与设计》一1.6 实例研究:万维网
- 正则判断 手机邮箱的正确格式
- 百度地图API之MyLocationOverlay的使用(Android)
- Qt / 窗体设置 Qt::WA_TranslucentBackground 为全黑的原因
- wincc 报警记录 mysql_如何才能把WINCC报警记录中的数据通过SQL取上来-工业支持中心-西门子中国...
- centos 6.6 oracle 10g,centos 6.2 安装 oracle 10g 问题
- Oracle正则表达式的用法
- vue+axios方法封装(restful,ajax)
- linux从usb安装软件,Linux下USB Camera的安装和使用
- mysql文件扩展名查询_如何通过MySQL查询获取文件的文件扩展名?
- java 常用富文本编辑器_常用的六个富文本编辑器
- [文章]Android不流畅,究其本质
- 《Linux就是这种范儿》读后感
- 迅雷看看引领高清内容多屏合一新趋势
- k8s学习-污点和容忍(概念、模版、创建、删除)
- 511遇见易语言注册调用乐玩插件类模块封装
- 「Gitee篇」如何用Git平台账号登录建木CI
- storyboard 苹果启动图_iOS平台自定义storyboard启动界面