344. 反转字符串

方法1 「reverse」

  1. var reverseString = function (s) {
  2. s.reverse();
  3. };

注解

301~400 - 图1

方法2 「双指针」

var reverseString = function(s) {
  let l = 0, r = s.length - 1;
  while (l < r) {
    [s[l], s[r]] = [s[r], s[l]];
    l++; r--;
  }
};

注解

头尾指针不断往中间移动,每次走一步,每走一步都将对应的值交换,直到两指针相撞。

301~400 - 图2

301~400 - 图3

方法3 「递归」

var reverseString = function(s) {
  const convert = (l, r) => {
    if (l >= r) return;
    [s[l], s[r]] = [s[r], s[l]];
    convert(l + 1, r - 1);
  }
  convert(0, s.length - 1);
};

注解

思路和双指针是相同的,核心都是遍历,只不过遍历的方式不一样,方法2 使用的是循环来进行遍历,而方法3 使用的是递归。

  • 明确递归的出口
if (l >= r) return;
  • 注意点
convert(l + 1, r - 1); // √
convert(++l, --r); // √
convert(l++, r--); // ×

301~400 - 图4