• Time:O(n)
• Space:O(n)

## C++

``````class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;

for (int i = 0; i < nums.size(); ++i) {
const int begin = nums[i];
while (i + 1 < nums.size() && nums[i] == nums[i + 1] - 1)
++i;
const int end = nums[i];
if (begin == end)
ans.push_back(to_string(begin));
else
ans.push_back(to_string(begin) + "->" + to_string(end));
}

return ans;
}
};
``````

## JAVA

``````class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> ans = new ArrayList<>();

for (int i = 0; i < nums.length; ++i) {
final int begin = nums[i];
while (i + 1 < nums.length && nums[i] == nums[i + 1] - 1)
++i;
final int end = nums[i];
if (begin == end)
else
ans.add("" + begin + "->" + end);
}

return ans;
}
}
``````

## Python

``````class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
ans = []

i = 0
while i < len(nums):
begin = nums[i]
while i < len(nums) - 1 and nums[i] == nums[i + 1] - 1:
i += 1
end = nums[i]
if begin == end:
ans.append(str(begin))
else:
ans.append(str(begin) + "->" + str(end))
i += 1

return ans
``````