问题描述
我想用单循环而不使用条件语句来反转二维数组的奇数索引元素。
输入:
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]);
}