You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改TypeScript二维数组旋转函数实现逆时针旋转?

解决思路与代码实现

你的顺时针函数核心是按「环」处理二维数组的元素循环移动,要实现逆时针循环移动一格,需要调整每个边及四个角元素的移动方向,以下是修正后的逆时针旋转函数:

function rotateCounterClockwise<T>(arr: T[][]) {
  const ret: any[][] = arr.map(c => c.map(v => "")); // 创建空的结果数组
  const rows = arr.length;
  if (rows === 0) return ret;
  const cols = arr[0].length;
  if (!arr.every(l => l.length === cols)) throw new Error("Not rectangular");
  const stationaryRing = (rows % 2 !== 0) && (cols % 2 !== 0) ? (Math.min(rows, cols) - 1)/2:-1;

  for (let r = 0; r < rows; r++) {
    const nr = rows - 1 - r;
    for (let c = 0; c < cols; c++) {
      const nc = cols - 1 - c;
      const ring = Math.min(r, nr, c, nc);
      let [rNew, cNew] = [r, c];

      if (ring !== stationaryRing) {
        // 顶行非左角元素:向左移动一格
        if (r === ring && c > ring) {
          cNew = c - 1;
        }
        // 右列非底角元素:向上移动一格
        else if (c === cols - 1 - ring && r < rows - 1 - ring) {
          rNew = r - 1;
        }
        // 底行非右角元素:向右移动一格
        else if (r === rows - 1 - ring && c < cols - 1 - ring) {
          cNew = c + 1;
        }
        // 左列非顶角元素:向下移动一格
        else if (c === ring && r > ring) {
          rNew = r + 1;
        }
        // 左上角:向下移动一格
        else if (r === ring && c === ring) {
          rNew = r + 1;
        }
        // 右上角:向左移动一格
        else if (r === ring && c === cols - 1 - ring) {
          cNew = c - 1;
        }
        // 右下角:向上移动一格
        else if (r === rows - 1 - ring && c === cols - 1 - ring) {
          rNew = r - 1;
        }
        // 左下角:向右移动一格
        else if (r === rows - 1 - ring && c === ring) {
          cNew = c + 1;
        }
      }

      ret[rNew][cNew] = arr[r][c];
    }
  }
  return ret;
}

关键修改说明

原顺时针函数是让每个元素向顺时针方向循环移动一格,逆时针则需要完全反转移动逻辑:

  1. 顶行元素:从「向右移」改为「向左移」(左角单独处理为向下移)
  2. 右列元素:从「向下移」改为「向上移」(底角单独处理为向上移)
  3. 底行元素:从「向左移」改为「向右移」(右角单独处理为向上移)
  4. 左列元素:从「向上移」改为「向下移」(顶角单独处理为向下移)
  5. 四个角的元素单独判断,避免出现索引越界问题

测试验证

输入3x3数组:

1 2 3
4 5 6
7 8 9

函数输出与预期完全一致:

2 3 6
1 5 9 
4 7 8

内容的提问来源于stack exchange,提问作者Tamir Myblat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:54:57