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 题目总结

  • 相关阅读:
    网页收藏
    background 和IMG的差异
    cefsharp开发实例1
    Node.js系列之node.js初探
    sublime3安装package controller遇到的问题
    java 指定日期加指定天数
    svn 命令
    mac下nodejs 更新到最新版本的最新方法
    mac系统安装redis
    sublime 安装插件
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13994575.html
Copyright © 2011-2022 走看看