leetcode 加一 && 公交路线

332 阅读1分钟

66. 加一

leetcode-cn.com/problems/pl…

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
    for(let i=digits.length -1;i>-1;i--){
        digits[i] = (digits[i] + 1) % 10
        if(digits[i] !== 0){
            return digits
        }
    }
    digits = [...Array(digits.length + 1)].map(_=>0)
    digits[0] = 1
    return digits
};

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
    let flag = 1
    for (let i = digits.length - 1; i >= 0; i--) {
        if (flag) {
            const target = digits[i] + flag
            if (target === 10) {
                digits[i] = 0
            }else{
                digits[i] = target
                flag --
                return digits
            }
        }
    }
    if(flag) {
        digits.unshift(flag)
    }
    return digits
};

815. 公交路线

leetcode-cn.com/problems/bu…

  • bfs 扩散关联的车站
/**
 * @param {number[][]} routes
 * @param {number} S
 * @param {number} T
 * @return {number}
 */
var numBusesToDestination = function (routes, S, T) {
    if (S === T) {
        return 0
    }
    let minTime = 0
    const stack = [S]
    const visted = []
    const relatedMap = {} 
    for (let i = 0; i < routes.length; i++) {
        for (let j = 0; j < routes[i].length; j++) {
            if (!relatedMap[routes[i][j]]) {
                relatedMap[routes[i][j]] = new Set()
            }
            relatedMap[routes[i][j]].add(i)
        }
    }
    // 扩散车站 而不是扩展路线
    while (stack.length) {
        minTime++
        const size = stack.length
        for (let i = 0; i < size; i++) {
            const data = stack.shift()
            if (data === T) {
                return minTime
            }
            const relatedRoutes = relatedMap[data]
            for (let nextRoutes of relatedRoutes) {
                for (let nextStation of routes[nextRoutes]) {
                    if (nextStation === T) {
                        return minTime
                    }
                    if (!visted[nextStation]) {
                        visted[nextStation] = true
                        stack.push(nextStation)
                    }
                }

            }

        }
    }


    return -1

};
  • bfs 扩散关联的线路 超时
/**
 * @param {number[][]} routes
 * @param {number} S
 * @param {number} T
 * @return {number}
 */
var numBusesToDestination = function (routes, S, T) {
    if(S===T){
        return 0
    }
    let minTime = 0
    const stack = []
    const visted = []
    for (let i = 0; i < routes.length; i++) {
        for (let j = 0; j < routes[i].length; j++) {
            if (routes[i][j] === S) {
                if (routes[i].indexOf(T) >= 0) {
                    return 1
                } else {
                    stack.push({ data: routes[i], index: i })

                }
            }
        }
    }


    while (stack.length) {
        minTime++
        const size = stack.length
        for (let i = 0; i < size; i++) {
            const { data, index } = stack.shift()
            if (data.indexOf(T) >= 0) {
                return minTime 
            } else {
                for (let m = 0; m < routes.length; m++) {
                    if (m !== index) {
                        if (isRelated(data, routes[m]) && !visted[m]) {
                            visted[m] = true
                            stack.push({ data: routes[m], index: m })
                        }
                    }
                }
            }

        }
    }

    function isRelated(l1, l2) {
        for (let i = 0; i < l1.length; i++) {
            if (l2.indexOf(l1[i]) >= 0) {
                return true
            }
        }
        return false
    }

    return -1

};