数组项不可变



我试图用两个指针解决leetCode上的557,我发现了一个奇怪的行为,我无法解释。

下面是我的代码
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
// return s.split(" ").map(w => w.split("").reverse().join("")).join(" ")
let arr = s.split(" "), w
for(let i = 0; i < arr.length; i++){
let x = arr[i], left = 0, right = x.length - 1, holder = null
while(left < right){
holder = x[left]
x[left] = x[right]
x[right] = holder
left += 1
right -= 1
}
}
return arr.join(" ")
};

和示例"Let's take LeetCode contest"

当我可以移动while循环函数和以不同的方式解决这个问题,我不知道为什么x是没有改变,从我的理解这是一个数组项,可以改变。

这是因为变量"x"不是数组,而是来自变量" ar& quot;的字符串。要使其工作,您需要更改

let x = arr[i]

let x = arr[i].split("")

正确的代码是:

var reverseWords = function(s) {
// return s.split(" ").map(w => w.split("").reverse().join("")).join(" ")
let arr = s.split(" "), w
for(let i = 0; i < arr.length; i++){
let x = arr[i].split(""), left = 0, right = x.length - 1, holder = null
while(left < right){
holder = x[right]
x[right] = x[left]
x[left] = holder
left += 1
right -= 1
}
arr[i] = x.join("");
}
return arr.join(" ")
};

最新更新