Tcdian / keep

今天不想做,所以才去做。
MIT License
5 stars 1 forks source link

949. Largest Time for Given Digits #318

Open Tcdian opened 3 years ago

Tcdian commented 3 years ago

949. Largest Time for Given Digits

给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。

最小的 24 小时制时间是 00:00,而最大的是 23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。

以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。

Example 1

Input: [1,2,3,4]
Output: "23:41"

Example 2

Input: [5,5,5,5]
Output: ""

Note

Tcdian commented 3 years ago

Solution

/**
 * @param {number[]} A
 * @return {string}
 */
var largestTimeFromDigits = function(A) {
    let result = [];
    const digits = [];
    const maxs = [2, 23, 235, 2359];
    backtracking([...A]);
    return result.length > 0 ? `${result[0]}${result[1]}:${result[2]}${result[3]}` : '';

    function backtracking(nums) {
        if (nums.length === 0) {
            if (Number(digits.join('')) >= Number(result.join(''))) {
                result = [...digits];
            }
            return;
        }
        for (let i = 0; i < nums.length; i++) {
            digits.push(nums[i]);
            if (
                (nums.length !== 2 || nums[i] < 6)
                    && Number(digits.join('')) <= maxs[digits.length - 1]
            ) {
                backtracking([...nums.slice(0, i), ...nums.slice(i + 1)]);
            }
            digits.pop();
        }
    }
};
function largestTimeFromDigits(A: number[]): string {
    let result: number[] = [];
    const digits: number[] = [];
    const maxs = [2, 23, 235, 2359] as const;
    backtracking([...A]);
    return result.length > 0 ? `${result[0]}${result[1]}:${result[2]}${result[3]}` : '';

    function backtracking(nums: number[]) {
        if (nums.length === 0) {
            if (Number(digits.join('')) >= Number(result.join(''))) {
                result = [...digits];
            }
            return;
        }
        for (let i = 0; i < nums.length; i++) {
            digits.push(nums[i]);
            if (
                (nums.length !== 2 || nums[i] < 6)
                    && Number(digits.join('')) <= maxs[digits.length - 1]
            ) {
                backtracking([...nums.slice(0, i), ...nums.slice(i + 1)]);
            }
            digits.pop();
        }
    }
};