Skip to content

Commit 5b1879a

Browse files
committed
feat: add ts solution to lc problem: No.0054
No.0054.Spiral Matrix
1 parent 5740163 commit 5b1879a

File tree

3 files changed

+297
-0
lines changed

3 files changed

+297
-0
lines changed

solution/0000-0099/0054.Spiral Matrix/README.md

+137
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,143 @@ func spiralOrder(matrix [][]int) []int {
184184
}
185185
```
186186

187+
### **C++**
188+
189+
```cpp
190+
class Solution {
191+
public:
192+
vector<int> spiralOrder(vector<vector<int>>& matrix) {
193+
int row=matrix.size();
194+
if(row==0)
195+
{
196+
vector<int> zero;
197+
zero.clear();
198+
return zero;
199+
}
200+
int col=matrix[0].size();
201+
if(row==1)
202+
return matrix[0];
203+
if(col==0)
204+
{
205+
vector<int> zero;
206+
zero.clear();
207+
return zero;
208+
}
209+
if(col==1)
210+
{
211+
vector<int> temp;
212+
for(int i=0;i<row;i++)
213+
temp.push_back(matrix[i][0]);
214+
return temp;
215+
}
216+
vector<int> result;
217+
result=matrix[0];//result存储第一行
218+
//temp=matirx.pop_back();
219+
for(int i=1;i<matrix.size()-1;i++)
220+
{
221+
result.push_back(matrix[i][matrix[0].size()-1]);//存储每行最后一个
222+
}
223+
for(int i=0;i<col;i++)
224+
{
225+
result.push_back(matrix[row-1][col-1-i]);//倒序存储最后一行
226+
}
227+
for(int i=1;i<row-1;i++)
228+
{
229+
result.push_back(matrix[row-i-1][0]);//倒序存储每一行第一个
230+
vector<int> zz(matrix[row-i-1].begin()+1,matrix[row-i-1].end()-1);//将中间行去除第一个和最后一个数
231+
matrix[row-i-1]=zz;
232+
}
233+
vector<vector<int>> m2(matrix.begin()+1,matrix.end()-1);//将matrix去除第一行和最后一行,递归调用
234+
//cout<<m2.size()<<" "<<m2[0].size();
235+
vector<int> l=spiralOrder(m2);
236+
result.insert(result.end(),l.begin(),l.end());//将递归结果插入result后面
237+
return result;
238+
239+
}
240+
};
241+
```
242+
243+
### **C#**
244+
245+
```cs
246+
using System;
247+
using System.Collections.Generic;
248+
249+
public class Solution {
250+
public IList<int> SpiralOrder(int[][] matrix) {
251+
var lenI = matrix.Length;
252+
var lenJ = lenI == 0 ? 0 : matrix[0].Length;
253+
var result = new List<int>(lenI * lenJ);
254+
var rounds = (Math.Min(lenI, lenJ) + 1) / 2;
255+
for (var r = 0; r < rounds; ++r)
256+
{
257+
if (lenI - r * 2 == 1)
258+
{
259+
for (var j = r; j < lenJ - r; ++j)
260+
{
261+
result.Add(matrix[r][j]);
262+
}
263+
}
264+
else if (lenJ - r * 2 == 1)
265+
{
266+
for (var i = r; i < lenI - r; ++i)
267+
{
268+
result.Add(matrix[i][r]);
269+
}
270+
}
271+
else
272+
{
273+
for (var j = r; j < lenJ - r - 1; ++j)
274+
{
275+
result.Add(matrix[r][j]);
276+
}
277+
for (var i = r; i < lenI - r - 1; ++i)
278+
{
279+
result.Add(matrix[i][lenJ - r - 1]);
280+
}
281+
for (var j = lenJ - r - 1; j > r; --j)
282+
{
283+
result.Add(matrix[lenI - r - 1][j]);
284+
}
285+
for (var i = lenI - r - 1; i > r; --i)
286+
{
287+
result.Add(matrix[i][r]);
288+
}
289+
}
290+
}
291+
return result;
292+
}
293+
}
294+
```
295+
296+
### **TypeScript**
297+
298+
```ts
299+
function spiralOrder(matrix: number[][]): number[] {
300+
const m = matrix.length;
301+
const n = matrix[0].length;
302+
const res = [];
303+
for (let i = 0; i <= m >> 1; i++) {
304+
for (let j = i; j < n - i - 1; j++) {
305+
res.push(matrix[i][j]);
306+
}
307+
for (let j = i; j < m - i - 1; j++) {
308+
res.push(matrix[j][n - i - 1]);
309+
}
310+
for (let j = i; j < n - i - 1; j++) {
311+
res.push(matrix[m - i - 1][n - j - 1]);
312+
}
313+
for (let j = i; j < m - i - 1; j++) {
314+
res.push(matrix[m - j - 1][i]);
315+
}
316+
}
317+
if (m & 1) {
318+
res.push(matrix[m >> 1][n >> 1]);
319+
}
320+
return res.slice(0, m * n);
321+
}
322+
```
323+
187324
### **...**
188325

189326
```

solution/0000-0099/0054.Spiral Matrix/README_EN.md

+137
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,143 @@ func spiralOrder(matrix [][]int) []int {
173173
}
174174
```
175175

176+
### **C++**
177+
178+
```cpp
179+
class Solution {
180+
public:
181+
vector<int> spiralOrder(vector<vector<int>>& matrix) {
182+
int row=matrix.size();
183+
if(row==0)
184+
{
185+
vector<int> zero;
186+
zero.clear();
187+
return zero;
188+
}
189+
int col=matrix[0].size();
190+
if(row==1)
191+
return matrix[0];
192+
if(col==0)
193+
{
194+
vector<int> zero;
195+
zero.clear();
196+
return zero;
197+
}
198+
if(col==1)
199+
{
200+
vector<int> temp;
201+
for(int i=0;i<row;i++)
202+
temp.push_back(matrix[i][0]);
203+
return temp;
204+
}
205+
vector<int> result;
206+
result=matrix[0];//result存储第一行
207+
//temp=matirx.pop_back();
208+
for(int i=1;i<matrix.size()-1;i++)
209+
{
210+
result.push_back(matrix[i][matrix[0].size()-1]);//存储每行最后一个
211+
}
212+
for(int i=0;i<col;i++)
213+
{
214+
result.push_back(matrix[row-1][col-1-i]);//倒序存储最后一行
215+
}
216+
for(int i=1;i<row-1;i++)
217+
{
218+
result.push_back(matrix[row-i-1][0]);//倒序存储每一行第一个
219+
vector<int> zz(matrix[row-i-1].begin()+1,matrix[row-i-1].end()-1);//将中间行去除第一个和最后一个数
220+
matrix[row-i-1]=zz;
221+
}
222+
vector<vector<int>> m2(matrix.begin()+1,matrix.end()-1);//将matrix去除第一行和最后一行,递归调用
223+
//cout<<m2.size()<<" "<<m2[0].size();
224+
vector<int> l=spiralOrder(m2);
225+
result.insert(result.end(),l.begin(),l.end());//将递归结果插入result后面
226+
return result;
227+
228+
}
229+
};
230+
```
231+
232+
### **C#**
233+
234+
```cs
235+
using System;
236+
using System.Collections.Generic;
237+
238+
public class Solution {
239+
public IList<int> SpiralOrder(int[][] matrix) {
240+
var lenI = matrix.Length;
241+
var lenJ = lenI == 0 ? 0 : matrix[0].Length;
242+
var result = new List<int>(lenI * lenJ);
243+
var rounds = (Math.Min(lenI, lenJ) + 1) / 2;
244+
for (var r = 0; r < rounds; ++r)
245+
{
246+
if (lenI - r * 2 == 1)
247+
{
248+
for (var j = r; j < lenJ - r; ++j)
249+
{
250+
result.Add(matrix[r][j]);
251+
}
252+
}
253+
else if (lenJ - r * 2 == 1)
254+
{
255+
for (var i = r; i < lenI - r; ++i)
256+
{
257+
result.Add(matrix[i][r]);
258+
}
259+
}
260+
else
261+
{
262+
for (var j = r; j < lenJ - r - 1; ++j)
263+
{
264+
result.Add(matrix[r][j]);
265+
}
266+
for (var i = r; i < lenI - r - 1; ++i)
267+
{
268+
result.Add(matrix[i][lenJ - r - 1]);
269+
}
270+
for (var j = lenJ - r - 1; j > r; --j)
271+
{
272+
result.Add(matrix[lenI - r - 1][j]);
273+
}
274+
for (var i = lenI - r - 1; i > r; --i)
275+
{
276+
result.Add(matrix[i][r]);
277+
}
278+
}
279+
}
280+
return result;
281+
}
282+
}
283+
```
284+
285+
### **TypeScript**
286+
287+
```ts
288+
function spiralOrder(matrix: number[][]): number[] {
289+
const m = matrix.length;
290+
const n = matrix[0].length;
291+
const res = [];
292+
for (let i = 0; i <= m >> 1; i++) {
293+
for (let j = i; j < n - i - 1; j++) {
294+
res.push(matrix[i][j]);
295+
}
296+
for (let j = i; j < m - i - 1; j++) {
297+
res.push(matrix[j][n - i - 1]);
298+
}
299+
for (let j = i; j < n - i - 1; j++) {
300+
res.push(matrix[m - i - 1][n - j - 1]);
301+
}
302+
for (let j = i; j < m - i - 1; j++) {
303+
res.push(matrix[m - j - 1][i]);
304+
}
305+
}
306+
if (m & 1) {
307+
res.push(matrix[m >> 1][n >> 1]);
308+
}
309+
return res.slice(0, m * n);
310+
}
311+
```
312+
176313
### **...**
177314

178315
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
function spiralOrder(matrix: number[][]): number[] {
2+
const m = matrix.length;
3+
const n = matrix[0].length;
4+
const res = [];
5+
for (let i = 0; i <= m >> 1; i++) {
6+
for (let j = i; j < n - i - 1; j++) {
7+
res.push(matrix[i][j]);
8+
}
9+
for (let j = i; j < m - i - 1; j++) {
10+
res.push(matrix[j][n - i - 1]);
11+
}
12+
for (let j = i; j < n - i - 1; j++) {
13+
res.push(matrix[m - i - 1][n - j - 1]);
14+
}
15+
for (let j = i; j < m - i - 1; j++) {
16+
res.push(matrix[m - j - 1][i]);
17+
}
18+
}
19+
if (m & 1) {
20+
res.push(matrix[m >> 1][n >> 1]);
21+
}
22+
return res.slice(0, m * n);
23+
}

0 commit comments

Comments
 (0)