螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。如:
1 2 3 4
10 11 12 5
9 8 7 6
循环不变量
处理的时候要选择左闭右开:
如上图所示,可能不太好理解,可以看下面的矩阵:
1 2 3 4
10 11 12 5
9 8 7 6
即每次只处理头到尾部之间的数据,不包含尾部也就是左(头)闭右(尾)开。
伪代码:
startx = 0;//初始的x坐标
starty = 0;//初始的y坐标
offset = 1;
count = 1;
while(n/2)%n为螺旋矩阵边的长度
{
for(j = starty; j < n-offset; j++)
//遍历红边
{
nums[startx][j] = count++;
}
//循环结束后 j = n - offset;
for(i = startx; i < n - offset; i++)
//遍历绿边
{
nums[i][j] = count++;
}
for(;j > starty;j--)
//遍历蓝边
{
nums[i][j] = count++;
}
//遍历紫边
for(;i > startx; i--)
{
num[i][j] = count++;
}
startx ++;
starty ++;
offset ++;
}
if(1 = n%2)
nums[i][j] = count;
牢记循环不变量原则,每一条边的处理规则要统一。