Skip to content

Commit 247a319

Browse files
authored
feat: add solutions to lc problem: No.3446 (#4674)
No.3446.Sort Matrix by Diagonals
1 parent 02b13cd commit 247a319

File tree

5 files changed

+355
-0
lines changed

5 files changed

+355
-0
lines changed

solution/3400-3499/3446.Sort Matrix by Diagonals/README.md

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,128 @@ function sortMatrix(grid: number[][]): number[][] {
273273
}
274274
```
275275

276+
#### Rust
277+
278+
```rust
279+
impl Solution {
280+
pub fn sort_matrix(mut grid: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
281+
let n = grid.len();
282+
if n <= 1 {
283+
return grid;
284+
}
285+
for k in (0..=n - 2).rev() {
286+
let mut i = k;
287+
let mut j = 0;
288+
let mut t = Vec::new();
289+
while i < n && j < n {
290+
t.push(grid[i][j]);
291+
i += 1;
292+
j += 1;
293+
}
294+
t.sort();
295+
let mut i = k;
296+
let mut j = 0;
297+
while i < n && j < n {
298+
grid[i][j] = t.pop().unwrap();
299+
i += 1;
300+
j += 1;
301+
}
302+
}
303+
for k in (1..=n - 2).rev() {
304+
let mut i = k;
305+
let mut j = n - 1;
306+
let mut t = Vec::new();
307+
loop {
308+
t.push(grid[i][j]);
309+
if i == 0 { break; }
310+
i -= 1;
311+
j -= 1;
312+
}
313+
t.sort();
314+
let mut i = k;
315+
let mut j = n - 1;
316+
loop {
317+
grid[i][j] = t.pop().unwrap();
318+
if i == 0 { break; }
319+
i -= 1;
320+
j -= 1;
321+
}
322+
}
323+
grid
324+
}
325+
}
326+
```
327+
328+
#### JavaScript
329+
330+
```js
331+
/**
332+
* @param {number[][]} grid
333+
* @return {number[][]}
334+
*/
335+
var sortMatrix = function (grid) {
336+
const n = grid.length;
337+
for (let k = n - 2; k >= 0; --k) {
338+
let i = k,
339+
j = 0;
340+
const t = [];
341+
while (i < n && j < n) {
342+
t.push(grid[i++][j++]);
343+
}
344+
t.sort((a, b) => a - b);
345+
for (const x of t) {
346+
grid[--i][--j] = x;
347+
}
348+
}
349+
for (let k = n - 2; k > 0; --k) {
350+
let i = k,
351+
j = n - 1;
352+
const t = [];
353+
while (i >= 0 && j >= 0) {
354+
t.push(grid[i--][j--]);
355+
}
356+
t.sort((a, b) => a - b);
357+
for (const x of t) {
358+
grid[++i][++j] = x;
359+
}
360+
}
361+
return grid;
362+
};
363+
```
364+
365+
#### C#
366+
367+
```cs
368+
public class Solution {
369+
public int[][] SortMatrix(int[][] grid) {
370+
int n = grid.Length;
371+
for (int k = n - 2; k >= 0; --k) {
372+
int i = k, j = 0;
373+
List<int> t = new List<int>();
374+
while (i < n && j < n) {
375+
t.Add(grid[i++][j++]);
376+
}
377+
t.Sort();
378+
foreach (int x in t) {
379+
grid[--i][--j] = x;
380+
}
381+
}
382+
for (int k = n - 2; k > 0; --k) {
383+
int i = k, j = n - 1;
384+
List<int> t = new List<int>();
385+
while (i >= 0 && j >= 0) {
386+
t.Add(grid[i--][j--]);
387+
}
388+
t.Sort();
389+
foreach (int x in t) {
390+
grid[++i][++j] = x;
391+
}
392+
}
393+
return grid;
394+
}
395+
}
396+
```
397+
276398
<!-- tabs:end -->
277399

278400
<!-- solution:end -->

solution/3400-3499/3446.Sort Matrix by Diagonals/README_EN.md

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,128 @@ function sortMatrix(grid: number[][]): number[][] {
271271
}
272272
```
273273

274+
#### Rust
275+
276+
```rust
277+
impl Solution {
278+
pub fn sort_matrix(mut grid: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
279+
let n = grid.len();
280+
if n <= 1 {
281+
return grid;
282+
}
283+
for k in (0..=n - 2).rev() {
284+
let mut i = k;
285+
let mut j = 0;
286+
let mut t = Vec::new();
287+
while i < n && j < n {
288+
t.push(grid[i][j]);
289+
i += 1;
290+
j += 1;
291+
}
292+
t.sort();
293+
let mut i = k;
294+
let mut j = 0;
295+
while i < n && j < n {
296+
grid[i][j] = t.pop().unwrap();
297+
i += 1;
298+
j += 1;
299+
}
300+
}
301+
for k in (1..=n - 2).rev() {
302+
let mut i = k;
303+
let mut j = n - 1;
304+
let mut t = Vec::new();
305+
loop {
306+
t.push(grid[i][j]);
307+
if i == 0 { break; }
308+
i -= 1;
309+
j -= 1;
310+
}
311+
t.sort();
312+
let mut i = k;
313+
let mut j = n - 1;
314+
loop {
315+
grid[i][j] = t.pop().unwrap();
316+
if i == 0 { break; }
317+
i -= 1;
318+
j -= 1;
319+
}
320+
}
321+
grid
322+
}
323+
}
324+
```
325+
326+
#### JavaScript
327+
328+
```js
329+
/**
330+
* @param {number[][]} grid
331+
* @return {number[][]}
332+
*/
333+
var sortMatrix = function (grid) {
334+
const n = grid.length;
335+
for (let k = n - 2; k >= 0; --k) {
336+
let i = k,
337+
j = 0;
338+
const t = [];
339+
while (i < n && j < n) {
340+
t.push(grid[i++][j++]);
341+
}
342+
t.sort((a, b) => a - b);
343+
for (const x of t) {
344+
grid[--i][--j] = x;
345+
}
346+
}
347+
for (let k = n - 2; k > 0; --k) {
348+
let i = k,
349+
j = n - 1;
350+
const t = [];
351+
while (i >= 0 && j >= 0) {
352+
t.push(grid[i--][j--]);
353+
}
354+
t.sort((a, b) => a - b);
355+
for (const x of t) {
356+
grid[++i][++j] = x;
357+
}
358+
}
359+
return grid;
360+
};
361+
```
362+
363+
#### C#
364+
365+
```cs
366+
public class Solution {
367+
public int[][] SortMatrix(int[][] grid) {
368+
int n = grid.Length;
369+
for (int k = n - 2; k >= 0; --k) {
370+
int i = k, j = 0;
371+
List<int> t = new List<int>();
372+
while (i < n && j < n) {
373+
t.Add(grid[i++][j++]);
374+
}
375+
t.Sort();
376+
foreach (int x in t) {
377+
grid[--i][--j] = x;
378+
}
379+
}
380+
for (int k = n - 2; k > 0; --k) {
381+
int i = k, j = n - 1;
382+
List<int> t = new List<int>();
383+
while (i >= 0 && j >= 0) {
384+
t.Add(grid[i--][j--]);
385+
}
386+
t.Sort();
387+
foreach (int x in t) {
388+
grid[++i][++j] = x;
389+
}
390+
}
391+
return grid;
392+
}
393+
}
394+
```
395+
274396
<!-- tabs:end -->
275397

276398
<!-- solution:end -->
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
public class Solution {
2+
public int[][] SortMatrix(int[][] grid) {
3+
int n = grid.Length;
4+
for (int k = n - 2; k >= 0; --k) {
5+
int i = k, j = 0;
6+
List<int> t = new List<int>();
7+
while (i < n && j < n) {
8+
t.Add(grid[i++][j++]);
9+
}
10+
t.Sort();
11+
foreach (int x in t) {
12+
grid[--i][--j] = x;
13+
}
14+
}
15+
for (int k = n - 2; k > 0; --k) {
16+
int i = k, j = n - 1;
17+
List<int> t = new List<int>();
18+
while (i >= 0 && j >= 0) {
19+
t.Add(grid[i--][j--]);
20+
}
21+
t.Sort();
22+
foreach (int x in t) {
23+
grid[++i][++j] = x;
24+
}
25+
}
26+
return grid;
27+
}
28+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @return {number[][]}
4+
*/
5+
var sortMatrix = function (grid) {
6+
const n = grid.length;
7+
for (let k = n - 2; k >= 0; --k) {
8+
let i = k,
9+
j = 0;
10+
const t = [];
11+
while (i < n && j < n) {
12+
t.push(grid[i++][j++]);
13+
}
14+
t.sort((a, b) => a - b);
15+
for (const x of t) {
16+
grid[--i][--j] = x;
17+
}
18+
}
19+
for (let k = n - 2; k > 0; --k) {
20+
let i = k,
21+
j = n - 1;
22+
const t = [];
23+
while (i >= 0 && j >= 0) {
24+
t.push(grid[i--][j--]);
25+
}
26+
t.sort((a, b) => a - b);
27+
for (const x of t) {
28+
grid[++i][++j] = x;
29+
}
30+
}
31+
return grid;
32+
};
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
impl Solution {
2+
pub fn sort_matrix(mut grid: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
3+
let n = grid.len();
4+
if n <= 1 {
5+
return grid;
6+
}
7+
for k in (0..=n - 2).rev() {
8+
let mut i = k;
9+
let mut j = 0;
10+
let mut t = Vec::new();
11+
while i < n && j < n {
12+
t.push(grid[i][j]);
13+
i += 1;
14+
j += 1;
15+
}
16+
t.sort();
17+
let mut i = k;
18+
let mut j = 0;
19+
while i < n && j < n {
20+
grid[i][j] = t.pop().unwrap();
21+
i += 1;
22+
j += 1;
23+
}
24+
}
25+
for k in (1..=n - 2).rev() {
26+
let mut i = k;
27+
let mut j = n - 1;
28+
let mut t = Vec::new();
29+
loop {
30+
t.push(grid[i][j]);
31+
if i == 0 {
32+
break;
33+
}
34+
i -= 1;
35+
j -= 1;
36+
}
37+
t.sort();
38+
let mut i = k;
39+
let mut j = n - 1;
40+
loop {
41+
grid[i][j] = t.pop().unwrap();
42+
if i == 0 {
43+
break;
44+
}
45+
i -= 1;
46+
j -= 1;
47+
}
48+
}
49+
grid
50+
}
51+
}

0 commit comments

Comments
 (0)