2018-09-18 542. 01 Matrix

題意:給你一個矩陣只包含元素0和1,求的一個矩陣,該矩陣在原矩陣為1的位置得出該元素距離最近的0的距離(僅能上下左右)。
解題思路:
動態(tài)規(guī)劃思路,矩陣中的某一點,如果在原矩陣中是0,那么該點在當前矩陣中也是0,;如果在原矩陣中不為0,那么該點到0的最近距離可由該點附近的點(上下左右)的最小值+1得出。
使用兩個循環(huán),第一個循環(huán)從上至下、從左至右,第二次循環(huán)從下往上從右向左。
這樣兩次循序可保證一個點一定和周圍的點比較過,且一定是最小值。

class Solution {
private:
    const int INTMAX = 0x4fffffff;
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        vector<vector<int>> ans(n, vector<int>(m, INTMAX));
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                if(matrix[i][j] == 0)
                    ans[i][j] = 0;
                else{
                    if(i > 0)
                        ans[i][j] = min(ans[i][j], ans[i-1][j]+1);
                    if(j > 0)
                        ans[i][j] = min(ans[i][j], ans[i][j-1]+1);
                }
        for(int i = n-1; i >= 0; i--)
            for(int j = m-1; j >=0; j--)
                if(ans[i][j] != 0){
                    if(i < n-1)
                        ans[i][j] = min(ans[i][j], ans[i+1][j]+1);
                    if(j < m-1)
                        ans[i][j] = min(ans[i][j], ans[i][j+1]+1);
                }
        return ans;
    }
};

注意:
一、二維vector的初始化
vector<vector<int>> ans(n, vector<int>(m, INTMAX));
n:該vector共有多少個行vector
vector<int>(m, INTMAX):每個vector初始化,每個vector共有m個元素,每個元素的值為INTMAX。
二、從上之下從左至右、從下至上從右向左的動態(tài)規(guī)劃思想。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,080評論 0 2
  • 第一次感知到時間的流逝是一次晚上在操場跑步,我聽著歌,忽然之間,感覺時間像流沙一樣,在身體里或者在身體之外某個地方...
    HandsomeKing閱讀 423評論 0 0
  • 你說,你喜歡長發(fā)飄飄 就像漫畫里走出的姑娘 你說,你喜歡溫柔乖巧 就像童話里的田螺姑娘 你說,你喜歡我文采飛揚 喜...
    柏淺歌閱讀 236評論 5 1
  • 人都是有惰性的,尤其是上班累成狗,回家就想癱軟的時候,惰性上身,很容易就陷入了“找借口-懊悔”的死循環(huán)中。 如何克...
    小葉彎彎閱讀 475評論 0 0
  • Block Pointer是這樣定義的: 回傳值(^名字)(參數(shù)列); 例:typedefvoid(^change...
    木木_mislay閱讀 226評論 0 1

友情鏈接更多精彩內容