Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given [0,1,2,4,5,7]
, return ["0->2","4->5","7"]
.
解题思路
略
实现代码
C++:
// Runtime: 0 ms
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> results;
int start = 0;
for (int i = 1; i <= nums.size(); i++)
{
if (i == nums.size() || nums[i - 1] + 1 < nums[i])
{
string temp = num2str(nums[start]);
if (start + 1 < i)
{
temp += "->";
temp += num2str(nums[i - 1]);
}
results.push_back(temp);
start = i;
}
}
return results;
}
string num2str(long long n)
{
if (n == 0)
{
return "0";
}
string temp = "";
bool flag = false;
if (n < 0)
{
flag = true;
n = -n;
}
while (n)
{
temp = (char)(n % 10 + '0') + temp;
n /= 10;
}
if(flag)
{
temp = '-' + temp;
}
return temp;
}
};
Java:
// Runtime: 268 ms
public class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<String>();
int begin = 0;
for (int i = 1; i <= nums.length; i++){
if (i == nums.length || nums[i] > nums[i-1] + 1){
StringBuilder sb = new StringBuilder();
sb.append(nums[begin]);
if (i > begin + 1){
sb.append("->");
sb.append(nums[i-1]);
}
res.add(sb.toString());
begin = i;
}
}
return res;
}
}
Python:
# Runtime: 36 ms
class Solution:
# @param {integer[]} nums
# @return {string[]}
def summaryRanges(self, nums):
x, size = 0, len(nums)
ans = []
while x < size:
c, r = x, str(nums[x])
while (x + 1) < size and nums[x+1] == nums[x] + 1:
x += 1
if x > c:
r += '->' + str(nums[x])
ans.append(r)
x += 1
return ans