LeetCode算法题解 203-移除链表元素

题目描述

题解:

其实这就是一道简单模拟题,看我的代码来理解吧:
tmp:记录下临时的图,初始值就是grid
开个循环:
判断1:遍历grid,如果图中没有1,也就代表没有新鲜的了,直接返回分钟数 (放在前面是因为有可能初始状态就是没有新鲜的,直接返回0)。
判断2:遍历grid,如果发现了2,那就把上、下、左、右的四个方向都判断一遍(不越界 + 值为1),就变为2,注意这里是把 tmp[i][j] = 2
将tmp赋值给grid,时间++。

代码:

class Solution {
public:
    int orangesRotting(vector<vector<int>>& grid) {
        vector<vector<int>> tmp;
        tmp = grid;
        int minite = 0;
        int row = grid.size();
        int col = grid[0].size();
        while(1)
        {
            bool flag = false;// 如果没有新鲜的了,就可以返回时间了
            for(int i = 0; i < row; i++)
            {
                for(int j = 0; j < col; j++)
                {
                    if(grid[i][j] == 1)
                    {
                        flag = true;
                    }
                }
            }
            if(!flag)
            {
                return minite;
            }

            bool flag2 = false;// 判断有无腐烂,如果遍历了一次没有腐烂的情况(2->1的情况),就代表不会腐烂了
            for(int i = 0; i < row; i++)
            {
                for(int j = 0; j < col; j++)
                {
                    if(grid[i][j] == 2)
                    {
                        if(i-1 >= 0 && tmp[i-1][j] == 1)// 向上
                        {
                            tmp[i-1][j] = 2; flag2 = true;
                        }
                        if(i+1 < row && tmp[i+1][j] == 1)// 向下
                        {
                            tmp[i+1][j] = 2; flag2 = true;
                        }
                        if(j-1 >= 0 && tmp[i][j-1] == 1)// 向左
                        {   
                            tmp[i][j-1] = 2; flag2 = true;
                        }
                        if(j+1 < col && tmp[i][j+1] == 1)// 向右
                        {
                            tmp[i][j+1] = 2; flag2 = true;
                        }
                    }
                }
            }
            if(!flag2)
            {
                return -1;
            }

            grid = tmp;
            minite++;
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章