题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目:
给定一个 无重复元素 的 有序 整数数组
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"提示:
0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
nums
中的所有值都 互不相同nums
按升序排列
个人思路:
- 定义变量:定义了四个变量,
Ii
、Im
、Ij
和S
。Ii
、Im
和Ij
是用于迭代和判断的整数变量,S
是用于存储范围字符串的变量。- 定义字符串向量:定义了名为
S1
的字符串向量,用于存储结果范围字符串。- 外层循环:使用
Ii
迭代整数向量nums
。- 内层循环:使用
Ij
迭代整数向量nums
,并使用Im
来跟踪初始值。
- 在循环中,如果
nums[Ij]
不等于Im
,则跳出内层循环。- 否则,将
Im
的值递增。- 构建范围字符串:将初始值转换为字符串并存储在
S
中。- 判断范围是否连续:如果
Im-1
不等于初始值,则说明范围不连续。
- 在这种情况下,将箭头符号
->
和末尾值转换为字符串,并将它们追加到S
中。- 存储范围字符串:将
S
移动到字符串向量S1
中。- 清空字符串:清空
S
的内容。- 更新迭代变量:将
Ii
更新为Ij-1
,以便下一次循环从正确的位置开始。- 返回结果:返回存储了范围字符串的字符串向量
S1
。
代码:
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
long Ii=0,Im=0,Ij=0;
string S;
vector<string> S1;
for(Ii=0;Ii<nums.size();Ii++){
Im=nums[Ii];//初始值
for(Ij=Ii;Ij<nums.size();Ij++,Im++){if(nums[Ij]!=Im)break;};//末尾值
S=to_string(nums[Ii]);//单点区间
if(Im-1!=nums[Ii]) {S.append("->");S.append(to_string(nums[Ij-1]));}//存在长度区间大于1时,数字转字符串
S1.push_back(move(S));//字符串存入容器
S.clear();字符串清空
Ii=Ij-1;//,获取下一段区间的初始值,for的++会多加1;因此减一回退
}
return S1;
}
};