算法面试第一课:导论+螺旋矩阵详解

需掌握重点:分治、回溯、链表(单向改链、逆置链)

                     二叉树查找(二分二叉查找树)、遍历(前、中、后、是否递归)

                      红黑树                                           js、java实现设计模式     动态规划

   矩阵:蛇形  螺旋  幸运  拉丁  魔方

              约瑟夫环模式  

              螺旋矩阵实现方式:取余  循环链表  循环队列

              最大循环,循环一次时:认为完成一圈赋值

  下面是第一圈(最外面一圈开始)

for(loop=0;loop<N/2;++loop){
    //上 i:0        j:0~N-2
    //右 i:0~N-2    j:N-1
    //下 i:N-1       j:N-1~1
    //左 i:N-1~1     j:0
} 

将上面的代码改变成每一圈都可使用(即用变量代替掉其中一部分常量与变量)

for(loop=0;loop<N/2;++loop){
    //上:  i:loop             j:loop~n-2-loop
    //右:  i:loop~N-2-loop    j:N-1-loop
    //下:  i:N-1-loop         j:N-1-loop~loop+1
    //左:  i:N-1-loop~loop+1  j:loop
}

最终实现如下:

for(loop=0;loop<N/2;++loop){
    for(i=loop,j=i;j<n-1;++j)    a[i][j]=++cnt;
    for(;i<n-1;++i)              a[i][j]=++cnt;
    for(;j>loop;--j)             a[i][j]=++cnt;
    for(;i>loop;--i)             a[i][j]=++cnt;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值