• 【leetcode42-----距离顺序排列矩阵单元格】


    距离顺序排列矩阵单元格

    给定四个整数 rows ,   cols ,  rCenter 和 cCenter 。有一个 rows x cols 的矩阵,你在单元格上的坐标是 (rCenter, cCenter) 。

    返回矩阵中的所有单元格的坐标,并按与 (rCenter, cCenter) 的 距离 从最小到最大的顺序排。你可以按 任何 满足此条件的顺序返回答案。

    单元格(r1, c1) 和 (r2, c2) 之间的距离为|r1 - r2| + |c1 - c2|。

    示例 1:

    输入:rows = 1, cols = 2, rCenter = 0, cCenter = 0
    输出:[[0,0],[0,1]]
    解释:从 (r0, c0) 到其他单元格的距离为:[0,1]
    示例 2:

    输入:rows = 2, cols = 2, rCenter = 0, cCenter = 1
    输出:[[0,1],[0,0],[1,1],[1,0]]
    解释:从 (r0, c0) 到其他单元格的距离为:[0,1,1,2]
    [[0,1],[1,1],[0,0],[1,0]] 也会被视作正确答案。
    示例 3:

    输入:rows = 2, cols = 3, rCenter = 1, cCenter = 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 <= rows, cols <= 100
    0 <= rCenter < rows
    0 <= cCenter < cols

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/matrix-cells-in-distance-order
     

    题解:

    本题就是一个典型广度优先的例子,使用队列实现广度优先。具体代码如下:

    1. class Solution {
    2. public int[][] allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
    3. int[] dx={0,-1,0,1};
    4. int[] dy={-1,0,1,0};
    5. int[][] res=new int[rows*cols][2];
    6. int[][] arr=new int[rows][cols];
    7. Queue<int[]> que=new ArrayDeque<int[]>();
    8. que.offer(new int[]{rCenter,cCenter});
    9. res[0][0]=rCenter;
    10. res[0][1]=cCenter;
    11. arr[rCenter][cCenter]=1;
    12. int cnt=1;
    13. while(!que.isEmpty()){
    14. int[] brr=que.poll();
    15. int x=brr[0];
    16. int y=brr[1];
    17. for(int i=0;i<4;i++){
    18. int mx=x+dx[i];
    19. int my=y+dy[i];
    20. if(mx>=0&&mx=0&&my1){
    21. que.offer(new int[]{mx,my});
    22. res[cnt][0]=mx;
    23. res[cnt][1]=my;
    24. cnt++;
    25. arr[mx][my]=1;
    26. }
    27. }
    28. }
    29. return res;
    30. }
    31. }

  • 相关阅读:
    【Web】HNCTF 2022 题解(全)
    几行代码实现用Python输出表情包
    Hudi从内核到实战介绍
    Codeforces Round #835 (Div. 4)
    SpringMVC06-SpringMVC的视图
    【ES6】学习笔记:let和const
    自己动手写线程池——向JDK线程池进发
    windows Vscode 连接 虚拟机,超详细,含免密免ip配置 以 linux 虚拟机为例
    前端暴露后端接口及传参方式总结~
    网络协议 — IPv6 互联网协议第 6 版
  • 原文地址:https://blog.csdn.net/qq_45071131/article/details/127832733