每日一道Leetcode——距离顺序排列矩阵单元格

题目:
在这里插入图片描述
我的解法:
思路:计算出每个单元格与给定坐标的距离d,将单元格[i,j]的坐标加入距离d形成三元组[i,j,d],保存到一个数组中。对这个数组中的单元格,重写sort函数,使其根据d进行排序。最终再取排序后的数组中每个单元格的坐标,保存到最终的结果数组中。

class Solution {
   
    public int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
   
        // 创建三元组数组,保存每个单元格的距离d
        int[][] triple_tuple = new int[R*C][];
        int index = 0;
        for(int i=0; i<R; i++){
   
            for(int j=0; j<C; j++){
   
                int d1 = i>r0 ? i-r0:r0-i;
                int d2 = j>c0 ? j-c0:c0-j;
                int d = d1 + d2;
                int[] block = new int[]{
   i,j,d};
                triple_tuple[index] = block;
                index++;
            }
        }
        // 根据d对三元组数组进行排序
        Arrays.sort(triple_tuple, new Comparator<int[]>() {
   
            public int compare(int[] block1, int[] block2) {
   
                    return block1[2] - block2[2];
            }
        });
        // 最后从排序后的三元组数组中取出每个单元格坐标
        int len = triple_tuple.length;
        int[][] result = new int[len][];
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值