📌  相关文章
📜  向左旋转 k 个单元格 (1)

📅  最后修改于: 2023-12-03 15:07:29.340000             🧑  作者: Mango

向左旋转 k 个单元格

在编程中,通常会遇到需要将一个数组或字符串按照一定规则进行旋转的情况。本文介绍如何实现“向左旋转 k 个单元格”的操作。

问题描述

给定一个数组或字符串和一个整数 k,将其向左旋转 k 个单元格。例如,对于数组 [1, 2, 3, 4, 5] 和 k = 2,应该返回 [3, 4, 5, 1, 2]。

解决方案

我们可以通过三次反转(reverse)操作来实现向左旋转 k 个单元格的操作。具体步骤如下:

  1. 将数组或字符串的前 k 个单元格进行反转;
  2. 将数组或字符串的后 n-k 个单元格进行反转;
  3. 将整个数组或字符串进行反转。

其中,n 表示数组或字符串的长度。

以数组为例,下面给出一份 Python 代码实现:

def rotate(nums, k):
    n = len(nums)
    k = k % n
    reverse(nums, 0, k - 1)
    reverse(nums, k, n - 1)
    reverse(nums, 0, n - 1)

def reverse(nums, start, end):
    while start < end:
        nums[start], nums[end] = nums[end], nums[start]
        start += 1
        end -= 1

此代码实现了将数组 nums 向左旋转 k 个单元格的操作。需要注意的是,我们在实现过程中首先对 k 进行了取模操作,以防 k 大于数组长度。

对于字符串,同样可以采用上述思路实现。下面给出一份 JavaScript 代码实现:

function rotate(str, k) {
    var len = str.length;
    k = k % len;
    str = reverse(str, 0, k - 1);
    str = reverse(str, k, len - 1);
    str = reverse(str, 0, len - 1);
    return str;
}

function reverse(str, start, end) {
    str = str.split('');
    while (start < end) {
        var temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
    return str.join('');
}
总结

本文介绍了如何实现“向左旋转 k 个单元格”的操作,让我们在解决相关问题时更加得心应手。