需掌握重点:分治、回溯、链表(单向改链、逆置链)
二叉树查找(二分二叉查找树)、遍历(前、中、后、是否递归)
红黑树 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;
}