记录题解-练习二进制手表计算
来源 leetcode题
量一个灯,输入: n = 1,返回可能的时间
返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
/**
* 将所有可能满足结果的值集合列举出来
* @param {number} num 量灯的数量
* @return {string[]} 可能的时间列表
*/
const readBinaryWatch = function (num) {
const arr = [1, 2, 4, 8, 1, 2, 4, 8, 16, 32];
const result = [];
const getBinaryTime = (count, timeArr = [0, 0], index = 0) => {
const tpArr = [...timeArr];
if (tpArr[0] > 11 || tpArr[1] > 59) return;
if (count === 0) {
result.push(tpArr);
return true;
};
for (let i = index; i < arr.length; i++) {
tpArr[i <= 3 ? 0 : 1] += arr[i];
// 下一个选中点
getBinaryTime(count - 1, tpArr, i + 1);
// 前一轮可能没被选中, 恢复计算结果, 下一轮继续计算
tpArr[i <= 3 ? 0 : 1] -= arr[i];
}
};
getBinaryTime(num);
return result.map((iArr) => `${iArr[0]}:${iArr[1] > 9 ? iArr[1] : '0' + iArr[1]}`);
};