228. Summary Ranges

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”].

解法1:

这题思路很简单,双指针。就是要写好写的没有bug不容易。
用一个j记录end的距离,然后在push到结果的时候检查j是否为1,以此来判断是否是单数。
C++

1

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<String>();
if (nums == null || nums.length == 0) {
return res;
}
int i = 0;
int n = nums.length;
while (i < n) {
int j = 1;
while (i + j < n && nums[i + j] - nums[i] == j) {
j++;
}
String range = j == 1 ? Integer.toString(nums[i]) : Integer.toString(nums[i]) + "->" + Integer.toString(nums[i + j - 1]);
res.add(range);
i += j;
}
return res;
}
}

重写了一个清楚点的版本

lang: java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<>();
if (nums == null || nums.length == 0) {
return res;
}
int start = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] > nums[i - 1] + 1) {
res.add(getRange(nums[start], nums[i - 1]));
start = i;
}
}
res.add(getRange(nums[start], nums[nums.length - 1]));
return res;
}
private String getRange(int start, int end) {
if (start == end) {
return Integer.toString(start);
}
return Integer.toString(start) + "->" + Integer.toString(end);
}
}