leetCode之数组操作

2020-09-28  本文已影响0人  Benzic

首页目录 点击查看

第一题

示例

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

解题思路

我的答案

var spiralOrder = function (matrix) {
    let array = []
    if (!matrix.length) return array
    let row = 0;
    let len = matrix.length;
    let rowLen = matrix[0].length
    let col = 0;
    let turn = rowLen - 1 === 0 ? "b" : "r"
    let boxL = 0;
    let boxR = rowLen - 1;
    let boxU = 0;
    let boxD = len - 1;

    while (array.length < (len * rowLen)) {
        !array.includes(matrix[row][col]) && array.push(matrix[row][col])
        if (turn === 'b') {
            row++
            if (row == boxD) {
                boxR--
                turn = 'l'
            }
        } else if (turn === 'l') {
            col--
            if (col == boxL) {
                boxD--
                turn = 't'
            }
        } else if (turn === 't') {
            row--
            if (row == boxU) {
                boxL++
                turn = 'r'
            }
        } else if (turn === 'r') {
            col++
            if (col == boxR) {
                boxU++
                turn = 'b'
            }
        }
    }
    return array
};
image.png

第二题

示例
输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

解题思路

我的答案

var generateMatrix = function (n) {
    let array = [];
    let row = 0;
    let col = 0;
    let num = 0;
    let turn = "r"
    let boxL = 0;
    let boxR = n - 1;
    let boxU = 0;
    let boxD = n - 1;
    if (n === 0) return array;
    while (num < (n * n)) {
        num += 1;
        if (!array[row]) {
            array[row] = []
        };
        array[row][col] = num;
        if (turn === 'b') {
            row++

            if (row == boxD) {
                boxR--
                turn = 'l'
            }
        } else if (turn === 'l') {
            col--
            if (col == boxL) {
                boxD--
                turn = 't'
            }
        } else if (turn === 't') {
            row--
            if (row == boxU) {
                boxL++
                turn = 'r'
            }
        } else if (turn === 'r') {
            col++
            if (col == boxR) {
                boxU++
                turn = 'b'
            }
        }
    }
    return array
};
image.png

第三题

示例

输入: 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
输出: 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

解题思路

我的答案

var setZeroes = function (matrix) {
    let len = matrix.length
    let rowLen = matrix[0].length
    let row = 0;
    let col = 0
    let num = 0;
    let changeRow = []
    let changeCol = []
    while (num < (len * rowLen)) {
        num++;
        if (matrix[row][col] === 0) {
            !changeRow.includes(row) && changeRow.push(row);
            !changeCol.includes(col) && changeCol.push(col)
        }
        if (col < rowLen - 1) {
            col++
        } else {
            col = 0
            row++
        }
    }
    while (changeRow.length || changeCol.length) {
        while (changeCol.length) {
            let sRow = 0;
            let tcol = changeCol.pop()
            while (sRow <= len - 1) {
                matrix[sRow][tcol] = 0
                sRow++
            }
        }
        while (changeRow.length) {
            let sCol = 0;
            let trow = changeRow.pop()
            while (sCol <= rowLen - 1) {
                matrix[trow][sCol] = 0
                sCol++
            }
        }
    }
    return matrix
};
image.png

第四题

示例

输入:rating = [2,5,3,4,1]
输出:3
解释:我们可以组建三个作战单位 (2,3,4)、(5,4,1)、(5,3,1) 。

输入:rating = [2,1,3]
输出:0
解释:根据题目条件,我们无法组建作战单位。

解题思路

我的答案

        var numTeams = function (rating) {
            let num = 0;
            for (let i = 0; i <= rating.length - 1; i++) {
                for (let j = i + 1; j <= rating.length - 1; j++) {
                    for (let z = j + 1; z <= rating.length - 1; z++) {
                        if (rating[i] < rating[j] && rating[j] < rating[z]) {
                            num += 1
                        } else if (rating[i] > rating[j] && rating[j] > rating[z]) {
                            num += 1
                        }
                    }
                }
            }
            return num
        };
        var numTeams = function (rating) {
            let num = 0;
            for (let i = 0; i <= rating.length - 1; i++) {
                let leftLess = 0,
                    leftMore = 0;
                let rightLess = 0,
                    rightMore = 0;
                for (let j = 0; j <= i; j++) {
                    if (rating[j] > rating[i]) {
                        leftMore += 1
                    }
                    if (rating[j] < rating[i]) {
                        leftLess += 1
                    }
                }
                for (let z = i + 1; z <= rating.length - 1; z++) {
                    if (rating[z] > rating[i]) {
                        rightMore += 1
                    }
                    if (rating[z] < rating[i]) {
                        rightLess += 1
                    }
                }
                num += leftLess * rightMore + leftMore * rightLess
            }
            return num
        };
上一篇下一篇

猜你喜欢

热点阅读