一道关于矩阵n*m的算法题

今天翻笔记,看到了曾经面试爱奇艺的一道算法面试题,当时由于时间的关系并没有答出来,回家也没有认真思考过,今天看到了,索性就沉下心来写了一下,可能方法过去繁琐,如果有更好的答案,可以一起探讨哦!下面就和我一起来看一下这道面试题吧~~

题目:

将数组
[
      [1,4,7],
      [2,5,6],
      [3,8,9]
];      
变成
[
      [1,2,3],
      [4,5,8],
      [7,6,9]
];   

思路:

本道题乍一看有点蒙,是个二维数组,细看可以理解为我们上学时都学过的n * m矩阵,题的本意就是想把n * m矩阵变成m*n矩阵。

步骤:

1.首先先将二维数组转化为一维数组,结果如下:

【
    1,4,7,
    2,5,6,
    3,8,9
】;

2.然后很明显,我们要将上面的一维数组改成下面新数组的样子:

【
   1,2,3,
   4,5,8,
   7,6,9
】;

要想拿到上面的数组,我们思考一下,一共有N行,M列。
拿到数组的下标我们就可以获取到新的数组。要拿到的index为
0,3,6
1,4,7
2,5,8
从上面可以看出规律吧。。。直接上公式吧:
第一组:0+3X0 0+3X1 0+3X2
第二组:1+3X0 1+3X1 1+3X2
第三组:2+3X0 2+3X1 2+3X2
。。。。
第N组:(n-1)+n*(m-1);

由此可以看出用两个循环嵌套就可以咯。

3.最后再用方法将一维数组变成二维数组即可。

废话不多说,直接上代码吧:

  //n*m => m*n
        let arr = [
                   [1,4,7],
                   [2,5,6],
                   [3,8,9],
                   ];
        //flat方法
        function flaten(arr){
            let newArr = [];
            for(let i = 0;i

OK,太晚了,今天就到这里吧~

你可能感兴趣的:(一道关于矩阵n*m的算法题)