这是我的代码,在我的for循环中,有一个while循环更改 变量i的值。我在while循环之前打印出i的值 和循环之后,新的"之前的索引值"预计将开始 at"在索引值+ 1"之后。然而,"新的指数值"只是 正常增加,每次增加一个。感谢你的时间。
class Solution
{
func summaryRange(nums: [Int]) -> [String]
{
var result = [String]()
if nums.count == 1
{
result.append(String(nums[0])+"")
return result
}
for var i in (0...nums.count-1)
{
let a = nums[i]
print("before: \(i)")
while i+1<nums.count && (nums[i+1] - nums[i] == 1)
{
i += 1
}
if a != nums[i]
{
result.append(String(a) + "->" + String(nums[i]))
}
else
{
result.append(String(a)+"")
}
print("after: \(i)")
}
return result
}
}
var test = Solution()
var input = [0,1,2,4,5,7]
var result = test.summaryRange(input)
print(result)
此代码尝试获得类似[&#34; 0-&gt; 2&#34;,&#34; 4-&gt; 5&#34;,&#34; 7&#34;]
的结果
答案 0 :(得分:1)
这是一个有趣的。我认为这样做的伎俩(还有一些代码清理: - ]
class Solution
{
func summaryRange(nums: [Int]) -> [String] {
var result = [String]()
var currentRange = [Int]()
for num in nums {
if currentRange.isEmpty { //if range is empty, start a new range
currentRange.append(num)
continue
}
if num - 1 != currentRange.last! { //if not next number in sequence, close range, start new
result.append(closeRange(currentRange))
currentRange = []
currentRange.append(num)
} else if num - 1 == currentRange.last {
currentRange.append(num) //if next number, add to range
}
}
if !currentRange.isEmpty {
result.append(closeRange(currentRange)) //check for unclosed ranges
}
return result
}
func closeRange(range: [Int]) -> String {
guard range.count > 0 else { return "" }
if range.count == 1 { return String(range.first!) }
return "\(range.first!)->\(range.last!)"
}
}
var test = Solution()
var input = [0,1,2,4,5,7]
var result = test.summaryRange(input)
print(result)
让我知道这对你有用!
答案 1 :(得分:1)
在swift中,for in
循环是序列类型的包装器。在这种特殊情况下,0...numCount-1
是一个Ints序列。当你在此召唤时,内部会发生什么。
let a = 0..<5
var generator = a.generate()
while var i = generator.next() {
print(i + 1)
i+= 1
}
因此即使你在循环内增加i的值,它也不会影响循环本身。这是因为循环只能通过调用genertator.next()
来控制。
这有助于理解基础知识。
答案 2 :(得分:0)
这是我自己的解决方案。我弄清楚了问题。基本上,我切换 “for循环”到“while循环”。然后,它有效。
class Solution
{
func summaryRanges(nums: [Int]) -> [String]
{
var result = [String]()
var i = 0
while(i<nums.count)
{
let a = nums[i]
while i+1<nums.count && (nums[i+1] - nums[i] == 1)
{
i += 1
}
if a != nums[i]
{
result.append(String(a) + "->" + String(nums[i]))
}
else
{
result.append(String(a)+"")
}
i += 1
}
return result
}
}