考题:如何把一个二维数组逆时针的存到一个一维数组里面
笔者在面试的时候遇到了一道题,面试官让我用熟悉的语言把一个二维数组逆时针的存到一个一维数组里面去。很遗憾当时没有做出来(残念,大家也知道如果算法面试的时候,如果编程题没做出来,基本凉凉),事后发现这道题其实很简单...所以笔者在此把自己的解题思路分享给大家,同时也以此为戒,来时时告诉自己编程基础的重要性。二维数组的逆时针遍历
神奇的是面试官当时居然提示我应该用规则来解这道题,但是我第一时间想到的是利用矩阵的转置。因为逆时针遍历上面这个数组相当于顺时针遍历下面这个数组↓:二维数组的正时针遍历
大家知道一个二维的数组其实就是一个矩阵,而上面这个过程恰好符合矩阵的转置运算,我们来回顾一下矩阵的转置:设A为m×n阶矩阵(即m行n列),第i 行j 列的元素是a(i,j),
即:把m×n矩阵A的行换成同序数的列得到一个n×m矩阵,此矩阵叫做A的转置矩阵。
我们拿到原始矩阵的转置后,我们可以观察到这个新的矩阵的第一行就是我们想要结果的前n个元素,那么这个矩阵可以被分解成2个部分,如下图所示,上半部分是我们想要答案的部分结果,下半部分则还需要进一步的被处理:矩阵分解的过程
实际上这种操作在Python就是很简单的切片、分片与索引的操作,我们先来回顾一下numpy的切片与引索:ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,