我正在做Leetcode第49题。.
我输入了这个,但它不起作用。
var groupAnagrams = function(strs) {
if(strs.length <= 1){
return [strs]
}
const hashMap = {}
for(let i = 0;i < strs.length;i++){
const currentKey = strs[i].split('').sort().join('')
if(hashMap[currentKey]){
hashMap[currentKey].push(strs[i])
}
hashMap[currentKey] = [strs[i]]
}
return Object.values(hashMap)
};
然后我问ChatGPT,它要求我把它放在else语句中
var groupAnagrams = function(strs) {
if(strs.length <= 1){
return [strs]
}
const hashMap = {}
for(let i = 0;i < strs.length;i++){
const currentKey = strs[i].split('').sort().join('')
if(hashMap[currentKey]){
hashMap[currentKey].push(strs[i])
} else {
hashMap[currentKey] = [strs[i]]
}
}
return Object.values(hashMap)
};
它有效,我不明白,为什么它需要在 else 语句中?是因为我什么都没退回吗?我以为如果不满足条件,事件循环会跳过 if 语句中的命令?
感谢您的回复!
您的原始代码在每个迭代周期错误地用
hashMap[currentKey]
覆盖 [strs[i]]
值。正确使用 else
appends 下一个 strs[i]
值 else 创建已填充第一个 strs[i]
值的数组。
if (hashMap[currentKey]) {
// Push strs[i] into existing array
hashMap[currentKey].push(strs[i]);
} else {
// Create new array reference and place strs[i] as first element
hashMap[currentKey] = [strs[i]];
}
有时你会看到一个“否定”检查,首先为密钥创建数组,然后无条件推入数组。
// No array value for key, create empty array
if (!hashMap[currentKey]) {
hashMap[currentKey] = [];
}
// Push current strs[i] into array
hashMap[currentKey].push(strs[i]);