Summary Ranges
LeetCode 228. Summary Ranges
원문
You are given a sorted unique integer array nums
.
A range [a,b]
is the set of all integers from a
to b
(inclusive).
Return the smallest sorted list of ranges that cover all the numbers in the array exactly. That is, each element of nums
is covered by exactly one of the ranges, and there is no integer x
such that x
is in one of the ranges but not in nums
.
Each range [a,b]
in the list should be output as:
"a->b"
ifa != b
"a"
ifa == b
풀이
nums
가 빈 배열이라면 빈 배열을 반환한다.- 비어있지 않다면 구간 시작 지점의 값을 저장하기 위한 변수
start
를 선언한다. 초기값은nums[0]
이다. nums
의 두 번째 원소부터 순회한다.i
번째 원소가i - 1
번째 원소보다 1 크다면continue
- 그렇지 않은 경우
start
가i - 1
번째 원소라면start
를 문자열로 변환해 결과 배열에 추가한다.start
와i - 1
번째 원소가 다르다면 결과 배열에{start}->{nums[i - 1]}
을 추가한다.start
를i
번째 원소로 갱신한다.
- 순회를 마친 후
start
가nums
의 마지막 원소라면 해당 값을 문자열로 변환해 결과 배열에 추가한다.start
가nums
의 마지막 원소와 다르다면 결과 배열에{start}->{nums[len(nums) - 1]}
을 추가한다.
- 결과 배열을 반환한다.
코드
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
if not nums: return list()
result = list()
start = nums[0]
for i in range(1, len(nums)):
if nums[i] == nums[i - 1] + 1: continue
else:
if start == nums[i - 1]: result.append(str(start))
else: result.append(f'{start}->{nums[i - 1]}')
start = nums[i]
if start == nums[-1]: result.append(str(start))
else: result.append(f'{start}->{nums[-1]}')
return result
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.