1030.距離順序排列矩陣單元格

題目描述

給出 R 行 C 列的矩陣疗隶,其中的單元格的整數(shù)坐標(biāo)為 (r, c)搏讶,滿足 0 <= r < R 且 0 <= c < C改艇。
另外兰粉,我們在該矩陣中給出了一個坐標(biāo)為 (r0, c0) 的單元格焊唬。
返回矩陣中的所有單元格的坐標(biāo)艇搀,并按到 (r0, c0) 的距離從最小到最大的順序排,其中求晶,兩單元格(r1, c1) 和 (r2, c2) 之間的距離是曼哈頓距離焰雕,|r1 - r2| + |c1 - c2|。(你可以按任何滿足此條件的順序返回答案芳杏。)
示例 1:
輸入:R = 1, C = 2, r0 = 0, c0 = 0
輸出:[[0,0],[0,1]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1]
示例 2:
輸入:R = 2, C = 2, r0 = 0, c0 = 1
輸出:[[0,1],[0,0],[1,1],[1,0]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1,1,2]
[[0,1],[1,1],[0,0],[1,0]] 也會被視作正確答案矩屁。
示例 3:
輸入:R = 2, C = 3, r0 = 1, c0 = 2
輸出:[[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1,1,2,2,3]
其他滿足題目要求的答案也會被視為正確,例如 [[1,2],[1,1],[0,2],[1,0],[0,1],[0,0]]爵赵。
提示:
1 <= R <= 100
1 <= C <= 100
0 <= r0 < R
0 <= c0 < C

Python

想法一:
一次到位吝秕,從(r0,c0)周圍出發(fā),按距離直接加入list中(然后i+j=n這種情況被自己蠢到了空幻,不太會寫烁峭,先放著,一會看別人的解析)
想法二:
遍歷一遍整個矩陣秕铛,計算每個元素的距離约郁,然后按照距離排序輸出即可
這個地方踩了一個坑,用dict存儲遍歷結(jié)果時但两,一開始想以坐標(biāo)對為key评抚,最后輸出按value排序的key即可谜酒,但dict的key不可以是list进鸠;因此各拷,選擇以距離為key,將同距離的坐標(biāo)存為list紧阔,最后按距離大小拼接list
合并list:

a += b   #方法一
a.extend(b)  #方法二
a[0:0]=b  #將b中元素插入到list a的開頭

(add)合并dict:

dict(a, **b) # 方法一坊罢,返回合并后的dict
dict(a.items()+b.items()) #方法二,返回合并后的dict
c = {}             #方法三
c.update(a)
c.update(b)

dict排序:

sorted(dic.items(), key = lambda item:item[0]) # 按key排序
sorted(dic.items(), key = lambda item:item[1]) # 按value排序
sorted(dic.items(), key = lambda item:item[1]["a"]) #多重嵌套排序擅耽,按照value對應(yīng)的dict中的key對應(yīng)的value排序
sorted(d.keys())  #按key排序只輸出key活孩,返回key的list
sorted(d.values()) #按value排序只輸出value,返回value的list

解題代碼

class Solution(object):
    def allCellsDistOrder(self, R, C, r0, c0):
        """
        :type R: int
        :type C: int
        :type r0: int
        :type c0: int
        :rtype: List[List[int]]
        """
        max_num = R * C
        num_dict = {}
        for i in range(0,R):
            for j in range(0,C):
                distance = abs(i-r0)+abs(j-c0)
                num_dict.setdefault(distance,[])
                lists = num_dict[distance]
                lists.append([i,j])
                num_dict[distance]=lists
        rst = []
        for k_v in sorted(num_dict.items(),key=lambda item:item[0]):
            rst += k_v[1]
        return rst

別人的簡潔寫法(但其實兩種方法都很暴力秫筏,不夠美)

olution:
    def allCellsDistOrder(self, R: int, C: int, r0: int, c0: int) -> List[List[int]]:
        return sorted(((i,j) for i in range(R) for j in range(C), key= lambda p: abs(p[0]-r0)+abs(p[1]-c0))

C++

還是一樣的思路诱鞠,二叉樹的思路還不太理解,后面理解了再補充

class Solution {
public:
    vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
        if (R < 0 || C <0 || r0 < 0 || c0 < 0){
            return vector<vector<int>> ();
        }
        unordered_map<int, vector<vector<int>>> dict;
        for(int i = 0; i < R; ++i) {
            for(int j = 0; j < C; ++j) {
                int val = abs(i - r0) + abs(j - c0);
                dict[val].push_back(vector<int>({i,j}));
            }
        }
        vector<int> keys;
        for (auto val: dict){
            keys.push_back(val.first);
        }
        sort(keys.begin(),keys.end());
        
        vector<vector<int>> res;
        for (auto val: keys){
            res.insert(res.end(),dict[val].begin(),dict[val].end());
        }
        return res;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末这敬,一起剝皮案震驚了整個濱河市航夺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崔涂,老刑警劉巖阳掐,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冷蚂,居然都是意外死亡缭保,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門蝙茶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艺骂,“玉大人,你說我怎么就攤上這事隆夯∏。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵蹄衷,是天一觀的道長忧额。 經(jīng)常有香客問我,道長愧口,這世上最難降的妖魔是什么睦番? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮耍属,結(jié)果婚禮上托嚣,老公的妹妹穿的比我還像新娘。我一直安慰自己厚骗,他們只是感情好注益,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溯捆,像睡著了一般丑搔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上提揍,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天啤月,我揣著相機與錄音,去河邊找鬼劳跃。 笑死谎仲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刨仑。 我是一名探鬼主播郑诺,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼夹姥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辙诞?” 一聲冷哼從身側(cè)響起辙售,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎飞涂,沒想到半個月后旦部,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡较店,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年士八,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梁呈。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡婚度,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出官卡,到底是詐尸還是另有隱情陕见,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布味抖,位于F島的核電站评甜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仔涩。R本人自食惡果不足惜忍坷,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熔脂。 院中可真熱鬧佩研,春花似錦、人聲如沸霞揉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽适秩。三九已至绊序,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秽荞,已是汗流浹背骤公。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扬跋,地道東北人阶捆。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洒试。 傳聞我的和親對象是個殘疾皇子倍奢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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