leetcode-401. 二进制手表
话不多说,上代码,差点栽在一个简单题手里,也是我没有想到的
其实呢,我有两种思路
- 一种就是把小时和分钟的所有位表示的数字都枚举出来,然后最后处理一下最后的输出格式就行了,这个可行,但是废手,而且容易出错
- 另外一种就是利用递归的方式,计算出每一步的所有可能值
第一种方式:暴力破解,是真的暴力
class Solution { /** * @param Integer $turnedOn * @return String[] */ public function readBinaryWatch($turnedOn) { if ($turnedOn > 8) { return []; } $hourSet = [ 0 => [0], 1 => [1, 2, 4, 8], 2 => [3, 5, 9, 6, 10], 3 => [7, 11], ]; $minuteSet = [ 0 => [0], 1 => [1, 2, 4, 8, 16, 32], 2 => [3,5,9,17,33,6,10,18,34,12,20,36,24,40,48], 3 => [7,11,19,35,13,21,37,25,41,49,14,22,38,26,42,50,28,44,52,56], 4 => [15,23,39,27,43,51,29,45,53,57,30,46,54,58], 5 => [31,47,55,59], ]; $hourPos = []; for ($i = 0; $i < $turnedOn+1 && $i < 4; $i++) { // 时针有几个亮起 $hRet = $hourSet[$i]; $mRet = $minuteSet[$turnedOn - $i]; foreach ($hRet as $hItem) { foreach ($mRet as $mItem) { if ($mItem < 10) { $mItem = '0'.$mItem; } $ret[] = $hItem.':'.$mItem; } } } return $ret; } }
第二种方式:回溯法
class Solution { /** * @param Integer $turnedOn * @return String[] */ public function readBinaryWatch($turnedOn) { // 时针最多有 4 个 // 分针最多亮 6 个 $hour = [1, 2, 4, 8]; $minutes = [1, 2, 4, 8, 16, 32]; $ret = []; for ($i = 0; $i <= $turnedOn && $i < 4; $i++) { $hourPossible = $this->getSetPossible($hour, $i, 11); $minutePossible = $this->getSetPossible($minutes, $turnedOn - $i, 59); foreach ($hourPossible as $hItem) { foreach ($minutePossible as $mItem) { if ($mItem < 10) { $mItem = '0' . $mItem; } $ret[] = $hItem . ':' . $mItem; } } } return $ret; } /** * @param $set * @param $count * @param $maxValue * @return array */ public function getSetPossible($set, $count, $maxValue) { if ($count == 0) { return [0]; } if ($count == 1) { return $set; } $setLen = count($set); $ret = []; // 第一个值的取值范围 $maxIndex = $setLen - $count; // 第一个值的取值范围如果超过,那么退出 for ($i = 0; $i <= $maxIndex; $i++) { $possibleSet = $this->getSetPossible(array_slice($set, $i + 1), $count - 1, $maxValue); foreach ($possibleSet as $setItem) { if ($setItem + $set[$i] <= $maxValue) { $ret[] = $set[$i] + $setItem; } } } return $ret; } }
最终,这一题也没有阻挡住我继续做 lc easy 题的步伐
本文来自博客园,作者:吴丹阳-V,转载请注明原文链接:https://www.cnblogs.com/wudanyang/p/14881538.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-06-13 超过经理收入的员工-leetcode