zoukankan      html  css  js  c++  java
  • 【leetcode】1030. Matrix Cells in Distance Order

    题目如下:

    We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), where 0 <= r < R and 0 <= c < C.

    Additionally, we are given a cell in that matrix with coordinates (r0, c0).

    Return the coordinates of all cells in the matrix, sorted by their distance from (r0, c0) from smallest distance to largest distance.  Here, the distance between two cells (r1, c1) and (r2, c2) is the Manhattan distance, |r1 - r2| + |c1 - c2|.  (You may return the answer in any order that satisfies this condition.)

    Example 1:

    Input: R = 1, C = 2, r0 = 0, c0 = 0
    Output: [[0,0],[0,1]]
    Explanation: The distances from (r0, c0) to other cells are: [0,1]
    

    Example 2:

    Input: R = 2, C = 2, r0 = 0, c0 = 1
    Output: [[0,1],[0,0],[1,1],[1,0]]
    Explanation: The distances from (r0, c0) to other cells are: [0,1,1,2]
    The answer [[0,1],[1,1],[0,0],[1,0]] would also be accepted as correct.
    

    Example 3:

    Input: R = 2, C = 3, r0 = 1, c0 = 2
    Output: [[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]]
    Explanation: The distances from (r0, c0) to other cells are: [0,1,1,2,2,3]
    There are other answers that would also be accepted as correct, such as [[1,2],[1,1],[0,2],[1,0],[0,1],[0,0]].
    

    Note:

    1. 1 <= R <= 100
    2. 1 <= C <= 100
    3. 0 <= r0 < R
    4. 0 <= c0 < C

    解题思路:BFS,就这样。

    代码如下:

    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]]
            """
            visit = []
            for i in range(R):
                visit.append([0] * C)
            direction = [(1,0),(-1,0),(0,1),(0,-1)]
            queue = [(r0,c0)]
            res = []
            while len(queue) > 0:
                x,y = queue.pop(0)
                if visit[x][y] == 1:
                    continue
                res.append([x, y])
                visit[x][y] = 1
                for (i,j) in direction:
                    if x + i >= 0 and x + i < R and y + j >=0 and y+j < C and visit[x+i][y+j] == 0:
                        queue.append((x+i,y+j))
            return res
  • 相关阅读:
    2. HTML 对象 <object>
    1. HTML 多媒体
    Android应用程序组件之间的通信Intent和IntentFilter
    Android IntentFilter 匹配原则浅析
    写些最近两个学安卓的笔记-关于Toast
    Android Activity之间通信
    绝对干货:供个人开发者赚钱免费使用的一些好的API接口
    Android几种layout(布局)的区别
    Inflater与findViewById()区别
    生产者/消费者问题的多种Java实现方式
  • 原文地址:https://www.cnblogs.com/seyjs/p/10765540.html
Copyright © 2011-2022 走看看