5、螺旋矩阵

        螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。如:

1        2        3        4

10     11      12       5

9        8        7        6

循环不变量

          处理的时候要选择左闭右开:

         如上图所示,可能不太好理解,可以看下面的矩阵:

1        2        3        4

10     11      12       5

      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;

        牢记循环不变量原则,每一条边的处理规则要统一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值