内容简介:二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。例如,上面的二进制手表读取 “3:25”。 给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。
Algorithm
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”]
注意事项:
输出的顺序没有要求。 小时不会以零开头,比如 “01:00” 是不允许的,应为 “1:00”。 分钟必须由两位数组成,可能会以零开头,比如 “10:2” 是无效的,应为 “10:02”。
解决方案:
我的解法:
class Solution { public List<String> readBinaryWatch(int num) { int[] hours = {8, 4, 2, 1}; int[] minutes = {32, 16, 8, 4, 2, 1}; List<String> result = new ArrayList<>(); for (int i = 0; i <= num; i++) { List<Integer> listHours = generateDigit(hours, i); List<Integer> listMinutes = generateDigit(minutes, num - i); for ( int hour : listHours) { if (hour >= 12) continue; for (int minute: listMinutes) { if (minute >= 60) continue; result.add(hour + ":" + (minute < 10 ? "0" + minute : minute)); } } } return result; } private List<Integer> generateDigit(int[] nums, int count) { List<Integer> result = new ArrayList<>(); generateDigitHelper(nums, count, 0, 0, result); return result; } private void generateDigitHelper(int[] nums, int count, int pos, int sum, List<Integer> result) { if(count == 0) { result.add(sum); return; } for(int i = pos; i < nums.length; i++){ generateDigitHelper(nums, count - 1, i + 1, sum + nums[i], result); } } }
更好的解法:
class Solution { int[] weight = {8, 4, 2, 1, 32, 16, 8, 4, 2, 1}; public List<String> readBinaryWatch(int num) { List<String> res = new ArrayList<>(); helper(0, 0, 0, num, res); return res; } private void helper(int hour, int min, int index, int num, List<String> res) { if (hour > 12 || min >= 60 || hour == 12 && min == 0) { return; } if (num == 0) { String strMin = String.valueOf(min); if (strMin.length() == 1) { strMin = "0" + strMin; } res.add(String.valueOf(hour) + ":" + strMin); } else if (index < 10 && num <= 10 - index && num > 0) { helper(hour, min, index + 1, num, res); if (index < 4) { helper(hour + weight[index], min, index + 1, num - 1, res); } else { helper(hour, min + weight[index], index + 1, num - 1, res); } } } }
python解法:
class Solution: def readBinaryWatch(self, num): """ :type num: int :rtype: List[str] """ return ['%d:%02d' % (h, m) for h in range(12) for m in range(60) if (bin(h) + bin(m)).count('1') == num]
Review
本文认为在代码评审这项实践中心态是最为重要的。
消极心态示例
作者:我写了很多编码,我为此感到自豪。 我真的想合并,但我需要请某人检查我的工作。
评论者:我忙于自己的代码,但现在我还有另一个任务要做。
作者:这可能需要很长时间……
评论者:有人在动我的代码,我最好确保他们不会搞砸。
作者:嗯……我认为评论者甚至不理解我正在做的事情。
积极心态示例
作者:我写了一些很棒的代码,但我知道它并不完美,我想改进,所以我想得到我信任的人的反馈。 他们很忙,所以我应该让评论尽可能简单。
评论者:有人很信任我,让我看看她花了几个小时的工作。 我应该尽我所能尽快给予建设性的反馈。
作者:评论者可能很困惑。 我需要让我的代码更清晰。
评论者:某些部分修改得很棒,特别是考虑到她刚加入团队。 我应该让她知道。
作者:我感谢他们的努力和时间。 反馈很有帮助。
作者
当作者以积极的方式思考时,他们自然会:
- 尽职尽责,尽力编写好的代码;
- 小心、仔细地检查他们的工作;
- 写清晰的提交消息来说明变更;
- 将大修改成小段提交,使评审者的工作变得更轻松;
- 当评审者指出错误或改进时,不会感到难受;
- 从反馈中学习而不是保护自己。
##评论者 当评论者以积极的方式思考时,他们自然会:
- 及时回复评审请求;
- 尽力全面地审查代码;
- 积极提供建设性的反馈,并指出潜在的错误和改进;
- 要善良,耐心,并使用大量的☺;
- 同理作者的情况 - 也许他们是新人,他们还不熟悉代码库; 也许他们功能发布的压力; 或者现有代码可能是令人困惑的;
- 从变化中学习,而不是批评它们。
Build the culture first, the rest will follow, as always.
Tip
hub是一个针对github操作的命令行包装库。
macOS: 安装方式
$ brew install hub
别名
$ alias git=hub
$ git version git version 2.17.0 hub version 2.3.0 # ← it works!
克隆项目
$ git clone dotfiles → git clone git://github.com/YOUR_USER/dotfiles.git
克隆其他项目
$ git clone github/hub → git clone git://github.com/github/hub.git
打开当前项目issues页面
$ git browse – issues → open https://github.com/github/hub/issues
打开其他项目wiki
$ git browse mojombo/jekyll wiki → open https://github.com/mojombo/jekyll/wiki
创建主题分支
$ git checkout -b feature ( making changes … ) $ git commit -m “done with feature”
\fork repo
$ git fork → (forking repo on GitHub…) → git remote add YOUR_USER git://github.com/YOUR_USER/hub.git
push变更到远端
$ git push YOUR_USER feature
开启一个主题分支的pull request
$ git pull-request → (opens a text editor for your pull request message)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Open Data Structures
Pat Morin / AU Press / 2013-6 / USD 29.66
Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!