【问题标题】:Reverse the odd indexed rows of a 2d array反转二维数组的奇数索引行
【发布时间】:2021-02-14 12:49:47
【问题描述】:

我想用单循环反转二维数组的奇数索引元素,不使用条件语句。

输入:

123
456
789

输出:

123
654
789

这是我的解决方案。但是如果不使用 Math.floor() 和 Math.abs() 我怎么能做到这一点呢?

let arr = [
  [1, 2, 3, 4, 5],
  [6, 7, 8, 9, 10],
  [11, 12, 13, 14, 15],
  [16, 17, 18, 19, 20],
];

let N = arr.length;
let M = arr[0].length;

for (let c = 0; c < N * M; c++) {
  let i = Math.floor(c / M);
  let j = c % M;
  let k = (Math.abs(i-1) % 2);
  let x = Math.abs(k * M - k - j);
  console.log(arr[i][x]);
}

【问题讨论】:

  • 您需要编写一个算法来执行此操作,而您似乎甚至没有尝试这样做。
  • 我尝试了但我做不到,这就是我在这里发帖的原因
  • 我没有看到你尝试任何事情的证据。
  • 我添加了。再次检查。
  • 这似乎可以解决您的原始问题,使用您尚未确定的语言。

标签: arrays algorithm data-structures reverse


【解决方案1】:
    const arr = [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15],
    [16, 17, 18, 19, 20],
  ];
  
  const n = arr.length;
  const m = arr[0].length;
  
  /*
   * 1 - left to right
   * 0 - right to left
   */
  const direction = 1;
  
  for (let i = 0; i < n * m; i++) {
    const row = Math.floor(i / m);
    const col =
      ((row + direction) % 2) * (i % m) +
      ((row + 1 + direction) % 2) * (m - 1 - (i % m));
  
    console.log(arr[row][col]);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多