class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;
if (nums.empty())return ans;
string temp = "";
for (int i = 0; i < nums.size(); i++)
{
if (temp.empty())//只要temp空 就要放东西
{
vector<char> v;
long int x = nums[i];
// cout<<x<<endl;
if(x==0)temp+='0';
if (x < 0) //考虑负数
{
temp += '-';
x = (-1)*x;
}
while (x != 0)
{
v.push_back('0' + x % 10);
x = x / 10;
}
for (int i = v.size() - 1; i >= 0; i--)
{
temp += v[i];
}
if (i == nums.size() - 1 || nums[i] + 1 != nums[i + 1])//出界或者和后面不相等 放进去
{
ans.push_back(temp);
temp = "";
}
}
else //不空要判断后面的和当前是否相邻 而且不能出界
{
if (i == nums.size() - 1 || nums[i] + 1 != nums[i + 1])//出界或者和后面不相等 放进去
{
temp += "->";
vector<char> v;
long int x = nums[i];
if(x==0)temp+='0';
if (x < 0) //考虑负数
{
temp += '-';
x = (-1)*x;
}
while (x != 0)
{
v.push_back('0' + x % 10);
x = x / 10;
}
for (int i = v.size() - 1; i >= 0; i--)
{
temp += v[i];
}
ans.push_back(temp);
temp = "";
}
}
}
//if(!temp.empty())ans.push_back(temp);
return ans;
}
};
解法:一个是数字转换字符串(包括负数),然后其他考虑条件比较多,难度适中。
228. Summary Ranges
Medium
357355FavoriteShare
Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7] Output: ["0->2","4->5","7"] Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.
Example 2:
Input: [0,2,3,4,6,8,9] Output: ["0","2->4","6","8->9"] Explanation: 2,3,4 form a continuous range; 8,9 form a continuous range.