“`C++
//使用顶行不大于底行,左列不大于右列控制循环
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
if (matrixSize == 0 || *matrixColSize == 0)
{
*returnSize = 0;
return NULL;
}
int row = matrixSize;
int col = *matrixColSize;
int size = row*col;
*returnSize = size;
int* arr = (int*)malloc(sizeof(int) * size);
int cnt = 0;//已经遍历的元素个数
int left = 0, right = col - 1, up = 0, down = row - 1;//左右上下边界
int i = 0;
while (1) //cnt < size
{
for (i = left; cnt < size && i <= right; i++)
{
arr[cnt++] = matrix[up][i];//打印上边界元素
}
//up++;
if (++up > down)
break;
for (i = up; cnt < size && i <= down; i++)
{
arr[cnt++] = matrix[i][right];//打印右边界元素
}
//right--;
if (--right < left)
break;
for (i = right; cnt < size && i >= left; i--)
{
arr[cnt++] = matrix[down][i];//打印下边界元素
}
//down--;
if (--down < up)
break;
for (i = down; cnt < size && i >= up; i--)
{
arr[cnt++] = matrix[i][left];//打印左边界元素
}
//left++;
if (++left > right)
break;
}
return arr;
共以下 9 个回答
“`java
class Solution {
public int[] spiralArray(int[][] array) {
if (array == null || array.length == 0 || array[0].length == 0) {
return new int[0];
}
int l = 0, r = array[0].length – 1, t = 0, b = array.length – 1;
int length = (r + 1)*(b + 1);
int[] res = new int[(r + 1)*(b + 1)];
int k = 0;
while (k < length) { //从左到右 for (int i = t, j = l; j <= r; j++) { res[k++] = array[i][j]; } if (++t > b) {
break;
}
//从上到下
for (int i = t, j = r; i <= b; i++) { res[k++] = array[i][j]; } if (--r < l) { break; } //从右到左 for (int i = b, j = r; j >= l; j–) {
res[k++] = array[i][j];
}
if (–b < t) { break; } //从下到上 for (int i = b, j = l; i >= t; i–) {
res[k++] = array[i][j];
}
l++;
}
return res;
}
}
模拟题
时间复杂度:O(mn)
空间复杂度:O(1)
时间:O(mn)
空间:O(1)
模拟
时间:O(mn)
空间:O(1)
“`C++
//使用顶行不大于底行,左列不大于右列控制循环
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
if (matrixSize == 0 || *matrixColSize == 0)
{
*returnSize = 0;
return NULL;
}
}
“`