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

    距离顺序排列矩阵单元格。

    给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。

    另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。

    返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/matrix-cells-in-distance-order
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题意不难理解,在二维坐标系里面有若干个点和一个目标点(r0, c0),请你按与目标点(r0, c0)之间的距离由近到远对这若干个点排序。

    思路就是自己写sort函数。首先我们把这若干个点通过两层for循环加入一个自己创建的二位数组里。这里创建二位数组 int[][] res 我们做的比较巧妙,第一维的长度是R * C,第二维的长度是2。第一维的长度R * C的用意是我们在input的大小为R * C的二维矩阵中挑出的若干个点,第二维是这些点的坐标。然后我们自己写sort函数按照要求对res数组排序即可。

    时间O(mn) - 因为要扫描矩阵

    空间O(n^2)

    Java实现

     1 class Solution {
     2     public int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
     3         int[][] res = new int[R * C][2];
     4         int index = 0;
     5         for (int i = 0; i < R; i++) {
     6             for (int j = 0; j < C; j++) {
     7                 res[index] = new int[] { i, j };
     8                 index++;
     9             }
    10         }
    11 
    12         Arrays.sort(res, (a, b) -> Math.abs(a[0] - r0) + Math.abs(a[1] - c0) - Math.abs(b[0] - r0) - Math.abs(b[1] - c0));
    13         return res;
    14     }
    15 }

    LeetCode 题目总结

  • 相关阅读:
    洛谷P5245 【模板】多项式快速幂
    洛谷P5205 【模板】多项式开根(FFT)
    laravel 数据库连接Mysql
    laravel V层引入css 和js方法
    laravel V层
    小程序地区时间自定义选择器 picker
    点击a标签 跳到当前页面指定div
    图片上下居中
    小程序消除图片下边距的三个方法
    百度地图定位
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13994575.html
Copyright © 2011-2022 走看看