我目前正在研究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
}
答案 0 :(得分:0)
算法取决于nums[i]
和nums[t]
之间的差异与i
和t
之间的差异不同。当发生这种情况时,算法会向输出添加更多内容。当最后一个范围只是一个数字时,这会创建一个特殊情况,因为这不能触发条件。
因此,哈希字符是填充以扩展数组以使算法工作,因此即使对于单个数字的结束范围,条件nums[i]-nums[t] !== i-t
也将触发。它可以是任何字符串,只要它不是整数。