P113. 旋转二维数组

https://algocasts.io/episodes/zbmKwgmZ

这道题有一种解法是直接将四个数互换位置,详见链接
C++ 图解原地操作,击败双百!(●ˇ∀ˇ●) - 旋转矩阵 - 力扣(LeetCode)

从动图到后边具体的四个坐标位置,感觉有些跳跃。

@Hawstein 能否展示下完整细致的思路过程?或者说遇到类似的题型,如何快速归纳坐标位置?

切身体验是经常在这种地方找不着北:rofl:

@archy.shawn

以图回图:

注意,通过计算得到的坐标值(n-1-i 或 n-1-j),它的示意线对应的是相同颜色的虚线。

快速归纳坐标的话,可以举一个简单的具体的例子,一般通过简单的计算就可以得出了,而且还可以快速地验证对错。另一种方法就是举一个足够一般化的例子来模拟,比如我图中画的那样,要足够的一般化。即对于 (i, j),它既不要在边上,也不要 i 等于 j 等等。否则这些会干扰你推导出正确的坐标关系。

最后,在坐标关系中,常常会看到 x + y = n-1 这种情况,因为 n-1 是相应的最大下标。所以在计算这些关系时,我都是倾向于写成:x = n-1-y。也就是把 n-1 看成一个整体,这样会更容易理解,为什么得出这样的式子。像你贴的图写的方式是 n-i-1 或 n-j-1,对我来说,这样是没有 n-1-i 或 n-1-j 理解起来直观的(当然了,这一点因人而异,选个符合自己习惯的使用就好)。

1赞