115 lines
3.1 KiB
C#
Executable File
115 lines
3.1 KiB
C#
Executable File
public class Solution
|
|
{
|
|
public int[][] SortMatrix(int[][] grid)
|
|
{
|
|
// 左下
|
|
var leftDiagonals = new Dictionary<int, List<int>>();
|
|
for (var i = 0; i < grid.Length; i++)
|
|
{
|
|
// total -> 2n + 1 way
|
|
for (var j = 0; j <= i; j++)
|
|
{
|
|
int diagonal = i - j;
|
|
if (!leftDiagonals.ContainsKey(diagonal))
|
|
{
|
|
leftDiagonals[diagonal] = new List<int>();
|
|
}
|
|
leftDiagonals[diagonal].Add(grid[i][j]);
|
|
}
|
|
}
|
|
|
|
// 右上
|
|
var rightDiagonals = new Dictionary<int, List<int>>();
|
|
for (var i = 0; i < grid.Length; i++)
|
|
{
|
|
for (var j = i; j < grid.Length; j++)
|
|
{
|
|
int diagonal = j - i;
|
|
if (!rightDiagonals.ContainsKey(diagonal))
|
|
{
|
|
rightDiagonals[diagonal] = new List<int>();
|
|
}
|
|
rightDiagonals[diagonal].Add(grid[i][j]);
|
|
}
|
|
}
|
|
|
|
foreach (var diagonal in leftDiagonals.Values)
|
|
{
|
|
diagonal.Sort((a, b) => b.CompareTo(a));
|
|
}
|
|
|
|
foreach (var diagonal in rightDiagonals.Values)
|
|
{
|
|
diagonal.Sort((a, b) => a.CompareTo(b));
|
|
}
|
|
|
|
for (var i = 0; i < grid.Length; i++)
|
|
{
|
|
for (var j = 0; j <= i; j++)
|
|
{
|
|
int diagonal = i - j;
|
|
grid[i][j] = leftDiagonals[diagonal][0];
|
|
leftDiagonals[diagonal].RemoveAt(0);
|
|
}
|
|
|
|
for (var j = i; j < grid.Length; j++)
|
|
{
|
|
if (i == j) continue;
|
|
int diagonal = j - i;
|
|
grid[i][j] = rightDiagonals[diagonal][0];
|
|
rightDiagonals[diagonal].RemoveAt(0);
|
|
}
|
|
}
|
|
return grid;
|
|
}
|
|
}
|
|
|
|
public class Solution2 {
|
|
public int[][] SortMatrix(int[][] grid) {
|
|
int n = grid.Length;
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
List<int> tmp = new List<int>();
|
|
for (int j = 0; i + j < n; j++) {
|
|
tmp.Add(grid[i + j][j]);
|
|
}
|
|
tmp.Sort((a, b) => b.CompareTo(a));
|
|
for (int j = 0; i + j < n; j++) {
|
|
grid[i + j][j] = tmp[j];
|
|
}
|
|
}
|
|
|
|
for (int j = 1; j < n; j++) {
|
|
List<int> tmp = new List<int>();
|
|
for (int i = 0; j + i < n; i++) {
|
|
tmp.Add(grid[i][j + i]);
|
|
}
|
|
tmp.Sort();
|
|
for (int i = 0; j + i < n; i++) {
|
|
grid[i][j + i] = tmp[i];
|
|
}
|
|
}
|
|
|
|
return grid;
|
|
}
|
|
}
|
|
|
|
class Program
|
|
{
|
|
static void Main()
|
|
{
|
|
var Solution = new Solution();
|
|
|
|
var gird = new int[][] { [1, 7, 3], [9, 8, 2], [4, 5, 6] };
|
|
var result = Solution.SortMatrix(gird);
|
|
|
|
for (int i = 0; i < result.Length; i++)
|
|
{
|
|
for (int j = 0; j < result[i].Length; j++)
|
|
{
|
|
Console.Write(result[i][j] + " ");
|
|
}
|
|
Console.WriteLine();
|
|
}
|
|
}
|
|
} |