内容简介:二进制手表顶部有 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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。