反转二维数组的奇数索引行

问题描述

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

输入:

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]);
}

解决方法

    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]);
  }