【问题标题】:Using # to mark end of array使用 # 标记数组的结尾
【发布时间】:2026-01-02 01:25:01
【问题描述】:

我目前正在研究另一个用户的代码,以解决 LeetCode 的一个编码问题。我的问题是关于他的代码的某些方面。这是the question的链接。

问题:

为什么这个用户使用# 来标记数组的结尾?

在第二个if 情况下,用户写道:

ans.push(nums[t] + '->' + (nums[i-1]))

现在,我明白这句话的作用了。我的问题是:为什么这会产生["0->2",...] 而不是[0"->"2,...] 的输出?

var summaryRanges = function(nums) {
    var t = 0
    var ans = []
    nums.push('#')
    for(var i=1;i<nums.length;i++)
        if(nums[i]-nums[t] !== i-t){
            if(i-t>1)
                ans.push(nums[t]+'->'+(nums[i-1]))
            else
                ans.push(nums[t].toString())
            t = i
        }
    return ans
}

【问题讨论】:

  • nums[t] + '-&gt;' + (nums[i-1]) 是字符串连接。 0 + "X" = "0X"
  • 不可能产生0"-&gt;"2,因为这是一个语法错误。

标签: javascript arrays string


【解决方案1】:

该算法取决于nums[i]nums[t] 之间的差异与it 之间的差异不同。发生这种情况时,算法会在输出中添加更多内容。当最后一个范围只是一个数字时,这会创建一个特殊情况,因为这不会触发条件。

因此,哈希字符被填充以扩展数组以使算法工作,因此条件nums[i]-nums[t] !== i-t 将触发,即使是单个数字的完成范围。它可以是任何字符串,只要它不是整数即可。

【讨论】: