首页 > 解决方案 > 为什么我的反向数组函数的输出与输入相同?

问题描述

我想写一个反向数组函数,我遇到了问题。编译器说我的输入和我的输出是一样的。

为什么会这样?

要求:

不要为另一个数组分配额外的空间,您必须通过使用 O(1) 额外内存就地修改输入数组来做到这一点。

示例 1:

输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

这是我的 JS:

  var reverseString = function(str) {
    var nowArray = [];
    nowArray.push(str);
    var newArray = [];
    for(let i=nowArray.length-1, k=0; i>=0; i--, k++) {
      newArray[k] = nowArray[nowArray.length-1];
      nowArray.length--;
    }
    console.log(newArray);
  };

reverseString( ["h","e","l","l","o"]) // Should return["o","l","l","e","h"]

标签: javascript

解决方案


您将整个字符串推送到nowArray而不是单个字符。相反,只需var nowArray = str.split("")获取字符数组即可。

var reverseString = function(str) {
  var nowArray = str.split("");
  var newArray = [];
  for (let i = nowArray.length - 1, k = 0; i >= 0; i--, k++) {
    newArray[k] = nowArray[nowArray.length - 1];
    nowArray.length--;
  }
  console.log(newArray);
};
reverseString("hello");

此外,您将字符数组而不是字符串传递给reverseString函数。


此外,由于您将字符串拆分为nowArray,因此您可以消除第二个数组,并仅使用该数组。这也可以让您将迭代减半。

var reverseString = function(str) {
  var nowArray = str.split("");
  for (let i = nowArray.length - 1, k = 0; i > k; i--, k++) {
    [nowArray[i], nowArray[k]] = [nowArray[k], nowArray[i]];
  }
  console.log(nowArray);
};
reverseString("hello");


推荐阅读