Arrays 打印m x n大小的螺旋矩阵,O(1)空间复杂度从1到mn
我想打印一个m x n大小从1到m*n的螺旋矩阵。这应该通过O1存储实现,即打印时不存储。有可能实现吗? 当矩阵为nxn时我做了,但无法处理m*n 示例:m=4 n=3 输出:Arrays 打印m x n大小的螺旋矩阵,O(1)空间复杂度从1到mn,arrays,algorithm,matrix,data-structures,Arrays,Algorithm,Matrix,Data Structures,我想打印一个m x n大小从1到m*n的螺旋矩阵。这应该通过O1存储实现,即打印时不存储。有可能实现吗? 当矩阵为nxn时我做了,但无法处理m*n 示例:m=4 n=3 输出: 1 2 3 10 11 4 9 12 5 8 7 6 当您尝试计算O1的空间复杂度时,下面的C代码可以做到这一点,尽管由于权衡,时间复杂度总是更差 #include<stdio.h> #include<stdlib.h> //Simulates filling the array in
1 2 3
10 11 4
9 12 5
8 7 6
当您尝试计算O1的空间复杂度时,下面的C代码可以做到这一点,尽管由于权衡,时间复杂度总是更差
#include<stdio.h>
#include<stdlib.h>
//Simulates filling the array in spiral fashion
//and finds the index we are currently in, and returns it.
int findVal(int x,int y,int m,int n)
{
int i,j,val=1,start=0,end=n,top=0,bottom=m;
while(val<=m*n)
{
for(i=start;i<end;i++)
{
if(top==x&&i==y)
return val;
val++;
}
for(i=top+1;i<bottom;i++)
{
if(i==x&&y==end-1)
return val;
val++;
}
for(i=end-2;i>=start;i--)
{
if(x==bottom-1&&y==i)
return val;
val++;
}
for(i=bottom-2;i>=top+1;i--)
{
if(x==i&&y==start)
return val;
val++;
}
start++;
end--;
top++;
bottom--;
}
return -1;
}
int main()
{
int m=4,n=3,i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",findVal(i,j,m,n));
}
printf("\n");
}
return 0;
}
希望这对你有所帮助。干杯:对于n x n矩阵代码中n的所有位置,请检查您必须将m放在哪里。您可以分享您对nxn的尝试吗?