1030. Matrix Cells in Distance Order
leetcode easy
Task
Вам даны четыре целых числа row, cols, rCenter и cCenter. Имеется матрица rows x cols, и вы находитесь на ячейке с координатами (rCenter, cCenter). Верните координаты всех ячеек в матрице, отсортированные по их расстоянию от (rCenter, cCenter) от наименьшего расстояния до наибольшего. Вы можете вернуть ответ в любом порядке, удовлетворяющем этому условию. Расстояние между двумя ячейками (r1, c1) и (r2, c2) равно |r1 - r2| + |c1 - c2|.
Пример:
Input: rows = 1, cols = 2, rCenter = 0, cCenter = 0
Output: [[0,0],[0,1]]
C# solution
matched/originalusing System;
using System.Collections.Generic;
public class Solution {
public int[][] AllCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
var cells = new List<(int, int, int)>();
for (int r = 0; r < rows; ++r) {
for (int c = 0; c < cols; ++c) {
int distance = Math.Abs(r - rCenter) + Math.Abs(c - cCenter);
cells.Add((distance, r, c));
}
}
cells.Sort((a, b) => a.Item1.CompareTo(b.Item1));
var result = new List<int[]>();
foreach (var cell in cells) {
result.Add(new int[] { cell.Item2, cell.Item3 });
}
return result.ToArray();
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int[][] AllCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
var cells = new List<(int, int, int)>();
for (int r = 0; r < rows; ++r) {
for (int c = 0; c < cols; ++c) {
int distance = abs(r - rCenter) + abs(c - cCenter);
cells.push_back((distance, r, c));
}
}
cells.Sort((a, b) => a.Item1.CompareTo(b.Item1));
var result = new List<int[]>();
foreach (var cell in cells) {
result.push_back(new int[] { cell.Item2, cell.Item3 });
}
return result.ToArray();
}
}Java solution
auto-draft, review before submitimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public int[][] AllCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
var cells = new List<(int, int, int)>();
for (int r = 0; r < rows; ++r) {
for (int c = 0; c < cols; ++c) {
int distance = Math.abs(r - rCenter) + Math.abs(c - cCenter);
cells.add((distance, r, c));
}
}
cells.Sort((a, b) => a.Item1.CompareTo(b.Item1));
var result = new List<int[]>();
foreach (var cell in cells) {
result.add(new int[] { cell.Item2, cell.Item3 });
}
return result.ToArray();
}
}JavaScript solution
matched/originalvar allCellsDistOrder = function(rows, cols, rCenter, cCenter) {
const cells = [];
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
const distance = Math.abs(r - rCenter) + Math.abs(c - cCenter);
cells.push([distance, r, c]);
}
}
cells.sort((a, b) => a[0] - b[0]);
return cells.map(cell => [cell[1], cell[2]]);
};Python solution
matched/originaldef allCellsDistOrder(rows, cols, rCenter, cCenter):
cells = []
for r in range(rows):
for c in range(cols):
distance = abs(r - rCenter) + abs(c - cCenter)
cells.append((distance, r, c))
cells.sort()
return [(r, c) for _, r, c in cells]Go solution
matched/originalimport (
"sort"
"math"
)
func allCellsDistOrder(rows int, cols int, rCenter int, cCenter int) [][]int {
cells := make([][3]int, 0, rows*cols)
for r := 0; r < rows; r++ {
for c := 0; c < cols; c++ {
distance := int(math.Abs(float64(r - rCenter)) + math.Abs(float64(c - cCenter)))
cells = append(cells, [3]int{distance, r, c})
}
}
sort.Slice(cells, func(i, j int) bool {
return cells[i][0] < cells[j][0]
})
result := make([][]int, len(cells))
for i, cell := range cells {
result[i] = []int{cell[1], cell[2]}
}
return result
}Explanation
Algorithm
Инициализация и вычисление расстояний:
Создайте список для хранения всех координат ячеек в матрице.
Вычислите расстояние Манхэттена от каждой ячейки до центра и добавьте пару (расстояние, координаты) в список.
Сортировка списка:
Отсортируйте список по расстоянию в порядке возрастания.
Извлечение координат:
Извлеките координаты из отсортированного списка и верните их.
😎