日常刷题0x18之未出新手村

92 阅读1分钟

如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的

题号:130
var solve = function (board) {
    let helper = (i, j) => {
        if (i < 0 || i >= board.length || j < 0 || j >= board[0].length) {
            //数组越界,不合法数据
            return
        }
        if (board[i][j] === 'X' || board[i][j] == -1) {
            return
        }
        //记录已经访问过
        board[i][j] = -1
        //开始向四周检查
        helper(i, j - 1)
        helper(i - 1, j)
        helper(i, j + 1)
        helper(i + 1, j)
    }
    for (let i = 0; i < board.length; i++) {
        for (let j = 0; j < board[0].length; j++) {
            if ((i == 0) || (j == 0) || (i == board.length - 1) || (j == board[0].length - 1)) {
                //四周边界
                if (board[i][j] === 'O') {
                    helper(i, j)
                }
            }
        }
    }
    for (let i = 0; i < board.length; i++) {
        for (let j = 0; j < board[0].length; j++) {
            if (board[i][j] == -1) {
                board[i][j] = 'O'
            } else {
                board[i][j] = 'X'
            }
        }
    }
};
题号:240
//数据是有规律的的找一个好的搜索点可以减枝调很多数据
//根据数据规律斜着比较
var searchMatrix = function (matrix, target) {
    let i = 0, j = matrix[0].length - 1
    while (i < matrix.length && j >= 0) {
        if (matrix[i][j] > target) {
            j--
        } else if (matrix[i][j] < target) {
            i++
        } else {
            return true
        }
    }
    return false
};
题号:371
//第一次刷没想到这么解,需要二刷
//此题主要是观察常规位运算结果的规律,利用规律来模拟运算
var getSum = function (a, b) {

    while (b != 0) {
        //异或运算:相同为1,不同为0
        //得到结果为不带进位的结果
        let temp = a ^ b
        //与运算:一个为1就为1
        //得到可能的各个进位的值(不一定有一个位置可以进位)
        //左移1就是加到下一个位置上
        b = (a & b) << 1
        a = temp
    }
    return a
};