给定一个 无重复元素 的 有序 整数数组 nums
。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums
的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums
的数字 x
。
列表中的每个区间范围 [a,b]
应该按如下格式输出:
"a->b"
,如果 a != b
"a"
,如果 a == b
示例 1:
输入:nums = [0,1,2,4,5,7] 输出:["0->2","4->5","7"] 解释:区间范围是: [0,2] --> "0->2" [4,5] --> "4->5" [7,7] --> "7"
示例 2:
输入:nums = [0,2,3,4,6,8,9] 输出:["0","2->4","6","8->9"] 解释:区间范围是: [0,0] --> "0" [2,4] --> "2->4" [6,6] --> "6" [8,9] --> "8->9"
- #include
- #include
- #include
- using namespace std;
-
- /*
- * 汇总区间问题
- * 判断区间范围,转换程数值放入字符串数组中
- */
- vector
summaryRanges(vector<int>& nums) { - vector
ret; - int i = 0;
- int n = nums.size();
- while (i < n) {
- int low = i;
- ++i;
- while (i < n && nums[i] == nums[i - 1] + 1) {
- ++i;
- }
- int high = i - 1;
- string temp = to_string(nums[low]);
- if (low < high) {
- temp.append("->");
- temp.append(to_string(nums[high]));
- }
- ret.push_back(move(temp));
- }
- return ret;
- }
-
- int main() {
- vector<int> nums = { 0,1,2,4,5,7 };
- vector
ret = summaryRanges(nums); - for (int i = 0; i < ret.size(); ++i) {
- cout << ret[i] << " ";
- }
- cout << endl;
- return 0;
- }
to_string() 函数:将数值转换为对应的字符串。
move() 函数:将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
append() 函数:向 string 的后面追加字符或字符串。