水平翻转
思路:
枚举每一行,以中垂线为对称轴交换左右元素,同时左右元素指针中间靠拢
public static void mirror(char[][] c){
for(int r = 0;r < n;r++){
int i = 0;
int j = n - 1;
while(i < j){
swap(c,r,i,r,j);
i++;
j--;
}
}
}
旋转90°
思路:
①以对角线为对称轴,交换左右两半边元素,如点(i,j)对应点(j,i)
②再进行水平翻转
public static void rotate(char[][] c){
for(int i = 0;i < n;i++){
for(int j = 0;j < i;j++){
swap(c,i,j,j,i);
}
}
mirror(c);
}
感谢y总,很实用的小技巧!