You are given a sorted unique integer array nums
.
A range [a,b]
is the set of all integers from a
to b
(inclusive).
Return the smallest sorted list of ranges that cover all the numbers in the array exactly. That is, each element of nums
is covered by exactly one of the ranges, and there is no integer x
such that x
is in one of the ranges but not in nums
.
Each range [a,b]
in the list should be output as:
"a->b"
ifa != b
"a"
ifa == b
Example 1:
Input: nums = [0,1,2,4,5,7] Output: ["0->2","4->5","7"] Explanation: The ranges are: [0,2] --> "0->2" [4,5] --> "4->5" [7,7] --> "7"
Example 2:
Input: nums = [0,2,3,4,6,8,9] Output: ["0","2->4","6","8->9"] Explanation: The ranges are: [0,0] --> "0" [2,4] --> "2->4" [6,6] --> "6" [8,9] --> "8->9"
Constraints:
0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
- All the values of
nums
are unique. nums
is sorted in ascending order.
vector<string>summaryRanges(vector<int>& nums)
{
int index = 0;
vector<string>result;
while (index < nums.size()) {
string strOutput;
strOutput = std::to_string(nums[index]);
bool bHaveChange = false;
for (int i = index; i < nums.size(); i++)
{
int nValue = 0;
if (i + 1 < nums.size())
{
nValue = nums[index] + 1;
}
else
{
if (bHaveChange) {
strOutput += "->";
strOutput += std::to_string(nums[index]);
}
result.push_back(strOutput);
return result;
}
if ( nValue == nums[i + 1])
{
index++;
bHaveChange = true;
}
else
{
if (bHaveChange) {
strOutput += "->";
strOutput += std::to_string(nums[index]);
}
result.push_back(strOutput);
index++;
break;
}
}
}
return result;
}
老實說, 這題算是我有小卡的一題, 而且解的方式真的很糟糕, 一直在想有什麼更好的方式可以更好的表達, 但好像還是不行, 弄者弄者就中午了, 先去吃飯, 晚上有小加班的時候再想看看好了.
留言列表