給定無重複升序整數數組,返回區間摘要字符串列表。連續區間用 "a->b",單獨數字用 "a"。
輸入: [0,1,2,4,5,7]
輸出: ["0->2","4->5","7"]
start 記錄區間起始索引。end 向後擴展,直到 nums[end+1] != nums[end] + 1。start = end + 1 繼續。public class Solution {
public List summaryRanges(int[] nums) {
List res = new ArrayList<>();
if (nums == null || nums.length == 0) return res;
int s = 0, e = 0;
while (e < nums.length) {
if (e + 1 < nums.length && nums[e+1] == nums[e] + 1) {
e++;
} else {
String str = (s == e) ? String.valueOf(nums[s])
: nums[s] + "->" + nums[e];
res.add(str);
e++;
s = e;
}
}
return res;
}
}
class Solution {
public:
vector summaryRanges(vector& nums) {
vector res;
int n = nums.size();
for (int i = 0; i < n; ) {
int j = i;
while (j + 1 < n && nums[j+1] == nums[j] + 1) ++j;
res.push_back(i == j ? to_string(nums[i])
: to_string(nums[i]) + "->" + to_string(nums[j]));
i = j + 1;
}
return res;
}
};
O(n),單次遍歷。O(1)(不計輸出)。to_string / String.valueOf。