讨论/题目交流/🏆 第 181 场力扣周赛/
🏆 第 181 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

3 分 - 按既定顺序创建目标数组
4 分 - 四因数
5 分 - 检查网格中是否存在有效路径
6 分 - 最长快乐前缀

展开讨论

发个T3的暴力模拟吧。。。这种题目好恶心。。。ctrl+c,ctrl+v用的小拇指都疼

class Solution {
public:
    queue<pair<int, int> > que;
    int n, m;
    void toUp(int x, int y, vector<vector<int>>& grid, vector<vector<bool> >& vis) {
        if (x - 1 >= 0 && (grid[x - 1][y] == 2 || grid[x - 1][y] == 3 || grid[x - 1][y] == 4) && vis[x - 1][y] == false)
        {
            que.push({ x - 1,y });
            vis[x - 1][y] = true;
        }
    }
    void toDown(int x, int y, vector<vector<int>>& grid, vector<vector<bool> >& vis) {
        if (x + 1 < m && (grid[x + 1][y] == 2 || grid[x + 1][y] == 5 || grid[x + 1][y] == 6) && vis[x + 1][y] == false)
        {
            que.push({ x + 1,y });
            vis[x + 1][y] = true;
        }
    }
    void toLeft(int x, int y , vector<vector<int>>& grid, vector<vector<bool> >& vis) {
        if (y - 1 >= 0 && (grid[x][y - 1] == 1 || grid[x][y - 1] == 4 || grid[x][y - 1] == 6) && vis[x][y - 1] == false)
        {
            que.push({ x,y - 1 });
            vis[x][y - 1] = true;
        }
    }
    void toRight(int x, int y, vector<vector<int>>& grid, vector<vector<bool> >& vis) {
        if (y + 1 < n && (grid[x][y + 1] == 1 || grid[x][y + 1] == 3 || grid[x][y + 1] == 5) && vis[x][y + 1] == false)
        {
            que.push({ x,y + 1 });
            vis[x][y + 1] = true;
        }
    }
    bool hasValidPath(vector<vector<int>>& grid) {
        int r = 0;
        int c = 0;
        m = grid.size();
        n = grid[0].size();
        vector<vector<bool> > vis(m, vector<bool>(n, false));
        que.push({ 0,0 });
        vis[0][0] = true;
        while (!que.empty())
        {
            int x = que.front().first;
            int y = que.front().second;
            if (x == m - 1 && y == n - 1)
                return true;
            if (grid[x][y] == 1)
            {
                toLeft(x, y, grid, vis);
                toRight(x, y, grid, vis);
            }
            else if (grid[x][y] == 2)
            {
                toUp(x, y, grid, vis);
                toDown(x, y, grid, vis);
            }
            else if (grid[x][y] == 3)
            {
                toLeft(x, y, grid, vis);
                toDown(x, y, grid, vis);
            }
            else if (grid[x][y] == 4)
            {
                toDown(x, y, grid, vis);
                toRight(x, y, grid, vis);
            }
            else if (grid[x][y] == 5)
            {
                toLeft(x, y, grid, vis);
                toUp(x, y, grid, vis);
            }
            else if (grid[x][y] == 6)
            {
                toRight(x, y, grid, vis);
                toUp(x, y, grid, vis);
            }
            que.pop();
        }
        return false;
    }
};
展开全部 41 讨论