第十八天 2021-3-26每日刷四题
刷题模块:位运算 - 简单难度
两个改变
- 加入Acwing中课程的学习
- 明天开始暂停leetcode的刷题,转为准备CCF-CSP
- 使用Java语言代替C++
一、 【题】二进制手表
官方题解:使用递归枚举所有可能,并巧妙地使用hours和minutes数组简化代码
代码十分的妙
class Solution {
int[] hours = new int[]{1, 2, 4, 8, 0, 0, 0, 0, 0, 0};
int[] minutes = new int[]{0, 0, 0, 0, 1, 2, 4, 8, 16, 32};
List<String> res = new ArrayList<>();
public List<String> readBinaryWatch(int num) {
backtrack(num, 0, 0, 0);
return res;
}
public void backtrack(int num, int index, int hour, int minute){
if(hour > 11 || minute > 59)
return;
if(num == 0){
StringBuilder sb = new StringBuilder();
sb.append(hour).append(':');
if (minute < 10) {
sb.append('0');
}
sb.append(minute);
res.add(sb.toString());
return;
}
for(int i = index; i < 10; i++){
backtrack(num - 1, i + 1, hour + hours[i], minute + minutes[i]);
}
}
}