目前想到两种解法:
1. 洋葱剥离旋转替换法
思路解析
由外向内分层,然后由首(坐标「0,0」的位置)至尾进行移位,每次变动四个数的位置。 那么对于n*n的矩阵来说,一圈为一层的话,一共可分为m=(n+1)//2层, 每次移动4个数字的话,则第k层需进行的次数为n-2*k-1,以此类推,例如:
当 n=3 时,则 m=(3+1)//2=2
第0层 第1层
1 2 3 1 2 3
4 5 6 => 4 6 5
7 8 9 7 8 9
针对第0层的旋转,全部就位需要旋转 3-2*0-1=2 次:
初始状态 第一次旋转 第二次旋转
1 2 3 7 2 1 7 4 1
4 6 => 4 6 => 8 2 => done
7 8 9 9 8 3 9 6 3
针对第1层的旋转,全部就位需要旋转 3-2*1-1=0:
初始状态
5 => done
当 n=4 时,则 m=(4+1)//2=2
第0层 第1层
1 2 3 4 1 2 3 4
5 6 7 8 5 8 6 7
9 10 11 12 => 9 12 10 11
13 14 15 16 13 14 15 16
针对第0层的旋转,全部就位需要旋转 4-2*0-1=3 次&#x