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++;
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章