题目:1030.建立顺序排列矩阵单元格

该文章介绍了如何解决LeetCode上的一个问题,即按照距离顺序排列矩阵中的单元格。解题方法是使用中心扩散的广度优先搜索策略,从目标单元格开始向外扩展,逐步填充结果数组。官方提供了三种解法,包括排序、桶排序和几何排序,其中作者采用了类似几何排序的BFS方法。
摘要由CSDN通过智能技术生成

题目来源:

        leetcode题目,网址:1030. 距离顺序排列矩阵单元格 - 力扣(LeetCode)

解题思路:

       以目标单元格为中心向四周扩展,依次加入数组即可。

解题代码:

class Solution {
    public int[][] allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
        int[][] res=new int[rows*cols][2];
        boolean[][] visited=new boolean[rows][cols];
        int[] r=new int[]{0,1,0,-1};
        int[] c=new int[]{1,0,-1,0};
        Queue<Integer> queue=new LinkedList<>();
        queue.offer(0);
        res[0][0]=rCenter;
        res[0][1]=cCenter;
        visited[rCenter][cCenter]=true;
        for(int i=1;!queue.isEmpty() && i<rows*cols;){
            int size=queue.size();
            for(int j=0;j<size;j++){
                int temp=queue.poll();
                int rTemp=res[temp][0];
                int cTemp=res[temp][1];
                for(int k=0;k<4;k++){
                    if(rTemp+r[k]<rows && rTemp+r[k]>=0 && cTemp+c[k]<cols && cTemp+c[k]>=0 &&
!visited[rTemp+r[k]][cTemp+c[k]]){
                        res[i][0]=rTemp+r[k];
                        res[i][1]=cTemp+c[k];
                        visited[rTemp+r[k]][cTemp+c[k]]=true;
                        queue.offer(i);
                        i++;
                    }
                }
            }
        }
        return res;
    }
}
 

总结:

        方向向量,不久前刚在题解里面看到过。

        官方题解给出了三种解法。第一种重写比较器,直接排序。第二种是桶排序,先计算出到目标点的距离,然后将相同距离的点放入同一个桶内,最后对桶进行排序。第三种是几何排序,与我的思路相似,但不同的是,他是直接往外移动,而我是使用队列保存。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值