832 翻轉(zhuǎn)圖像

題目:

題目鏈接

給定一個(gè)二進(jìn)制矩陣 A赃绊,我們想先水平翻轉(zhuǎn)圖像,然后反轉(zhuǎn)圖像并返回結(jié)果辫诅。

水平翻轉(zhuǎn)圖片就是將圖片的每一行都進(jìn)行翻轉(zhuǎn)凭戴,即逆序。例如炕矮,水平翻轉(zhuǎn) [1, 1, 0] 的結(jié)果是 [0, 1, 1]么夫。

給定一個(gè)二進(jìn)制矩陣 A,我們想先水平翻轉(zhuǎn)圖像肤视,然后反轉(zhuǎn)圖像并返回結(jié)果档痪。

水平翻轉(zhuǎn)圖片就是將圖片的每一行都進(jìn)行翻轉(zhuǎn),即逆序邢滑。例如腐螟,水平翻轉(zhuǎn) [1, 1, 0] 的結(jié)果是 [0, 1, 1]。

反轉(zhuǎn)圖片的意思是圖片中的 0 全部被 1 替換, 1 全部被 0 替換乐纸。例如衬廷,反轉(zhuǎn) [0, 1, 1] 的結(jié)果是 [1, 0, 0]。

示例 1:

輸入: [[1,1,0],[1,0,1],[0,0,0]]
輸出: [[1,0,0],[0,1,0],[1,1,1]]
解釋: 首先翻轉(zhuǎn)每一行: [[0,1,1],[1,0,1],[0,0,0]]汽绢;
然后反轉(zhuǎn)圖片: [[1,0,0],[0,1,0],[1,1,1]]

示例 2:

輸入: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
輸出: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
解釋: 首先翻轉(zhuǎn)每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]]吗跋;
然后反轉(zhuǎn)圖片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

說明:

1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1

解題思路:

首先根據(jù)題目給的思路來,對(duì)數(shù)據(jù)進(jìn)行一次遍歷宁昭,交換對(duì)應(yīng)位置上的數(shù)據(jù)跌宛。

        //獲取輸入數(shù)據(jù)

        int len_h = A.size();    //獲取行數(shù)

        int len_w = A[0].size()-1;    //獲取列數(shù),這里為了方便后面使用积仗,-1對(duì)應(yīng)下標(biāo)

之后遍歷每一行的前一半的列疆拘,判斷數(shù)據(jù),先取反再交換位置
這里直接暴力實(shí)現(xiàn)

        for(int i = 0; i < len_h; i++){  //按行遍歷
            for(int j = 0; j <= len_w/2; j++){  //遍歷前一半的數(shù)據(jù)
                int temp = 0;  //用于交換位置的輔助存儲(chǔ)
                if(A[i][j] == 0)
                    A[i][j] = 1;
                else
                    A[i][j] = 0;  //對(duì)A[i][j]取反
                if(A[i][len_w-j] == 0)
                    A[i][len_w-j] = 1;
                else
                    A[i][len_w-j] = 0;  //根據(jù)j的值定位對(duì)應(yīng)位置的值寂曹,并取反
                temp = A[i][len_w-j];
                A[i][len_w-j] = A[i][j];
                A[i][j] = temp;     //交換數(shù)據(jù)
                if(j == len_w-j){   //若是長度為奇數(shù)哎迄,對(duì)上述遍歷不到的最中間的一位進(jìn)行取反
                    if(A[i][j] == 0)
                    A[i][j] = 1;
                else
                    A[i][j] = 0;
                }
            }
        }

這樣唯一使用到的知識(shí)點(diǎn)就是交換數(shù)據(jù)的三行代碼,ヽ(ー_ー)ノ
到這里基本就完成了稀颁,最后把二維容器A返回即可芬失。

升級(jí)版

上述代碼能夠成功AC,但是時(shí)間效率和空間效率都明顯略低匾灶,特別是時(shí)間效率

執(zhí)行用時(shí) : 36 ms, 在Flipping an Image的C++提交中擊敗了28.76% 的用戶
內(nèi)存消耗 : 9.4 MB, 在Flipping an Image的C++提交中擊敗了70.61% 的用戶

接下來對(duì)代碼進(jìn)行優(yōu)化棱烂,先從原理開始,既然想要優(yōu)化就不能按照題目中描述的直接暴力解題了阶女,需要找到其中的癥結(jié)所在颊糜。
這題能夠優(yōu)化的內(nèi)容在于,對(duì)于對(duì)應(yīng)位置上相等的數(shù)據(jù)秃踩,可以不進(jìn)行數(shù)據(jù)交換衬鱼,直接取反即可

    class Solution {
    public:
        vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
             int len_h = A.size();
            int len_w = A[0].size();
            for(int i=0;i<len_h;i++)
            {
                for(int j=len_w/2;j<len_w;j++)//A[i].size()-1-j
                {
                    if(A[i][len_w-1-j]==A[i][j])
                    {
                        if(A[i][j]==1)
                        {
                            A[i][j]=0;
                            A[i][len_w-1-j]=0;
                        }                        
                        else
                        {
                            A[i][j]=1;
                            A[i][len_w-1-j]=1;
                        }
                    }
                }
            }
            return A;
        }
    };

優(yōu)化后的代碼時(shí)間效率有明顯提升

執(zhí)行用時(shí) : 16 ms, 在Flipping an Image的C++提交中擊敗了96.83% 的用戶
內(nèi)存消耗 : 9.4 MB, 在Flipping an Image的C++提交中擊敗了70.61% 的用戶

到此為止本題已經(jīng)基本解決,感謝閱讀 |??ω?` )

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憔杨,一起剝皮案震驚了整個(gè)濱河市鸟赫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌消别,老刑警劉巖抛蚤,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寻狂,居然都是意外死亡岁经,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門蛇券,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缀壤,“玉大人樊拓,你說我怎么就攤上這事√聊剑” “怎么了筋夏?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苍糠。 經(jīng)常有香客問我叁丧,道長,這世上最難降的妖魔是什么岳瞭? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蚊锹,結(jié)果婚禮上瞳筏,老公的妹妹穿的比我還像新娘。我一直安慰自己牡昆,他們只是感情好姚炕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丢烘,像睡著了一般柱宦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上播瞳,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天掸刊,我揣著相機(jī)與錄音,去河邊找鬼赢乓。 笑死忧侧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牌芋。 我是一名探鬼主播蚓炬,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼躺屁!你這毒婦竟也來了肯夏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤犀暑,失蹤者是張志新(化名)和其女友劉穎驯击,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體母怜,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡余耽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苹熏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碟贾。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡币喧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出袱耽,到底是詐尸還是另有隱情杀餐,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布朱巨,位于F島的核電站史翘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冀续。R本人自食惡果不足惜琼讽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洪唐。 院中可真熱鬧钻蹬,春花似錦、人聲如沸凭需。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粒蜈。三九已至顺献,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工八酒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人设捐。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像塘淑,于是被迫代替她去往敵國和親萝招。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 給定一個(gè)二進(jìn)制矩陣 A存捺,我們想先水平翻轉(zhuǎn)圖像槐沼,然后反轉(zhuǎn)圖像并返回結(jié)果。水平翻轉(zhuǎn)圖片就是將圖片的每一行都進(jìn)行翻轉(zhuǎn)捌治,即...
    閉門造折閱讀 164評(píng)論 0 0
  • 題目 難度:★☆☆☆☆類型:幾何岗钩,二維數(shù)組 給定一個(gè)二進(jìn)制矩陣 A,我們想先水平翻轉(zhuǎn)圖像肖油,然后反轉(zhuǎn)圖像并返回結(jié)果兼吓。...
    玖月晴閱讀 572評(píng)論 0 0
  • 給定一個(gè)二進(jìn)制矩陣A,我們想先水平翻轉(zhuǎn)圖像森枪,然后反轉(zhuǎn)圖像并返回結(jié)果视搏。水平翻轉(zhuǎn)圖片就是將圖片的每一行都進(jìn)行翻轉(zhuǎn)审孽,即逆...
    SunSeaSky閱讀 666評(píng)論 3 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 總結(jié): 1. 注意 1.1. 認(rèn)真。既然想提高浑娜,還是得認(rèn)真寫句子佑力,不是為了打卡而完成; 1.2 創(chuàng)建自己的chec...
    依然良生閱讀 399評(píng)論 1 2