Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its missing ranges.
For example, given [0, 1, 3, 50, 75]
, lower = 0 and upper =
99, return ["2", "4->49", "51->74", "76->99"].
Difficulty: Medium
public class Solution {
public String genString(int start, int end){
if(start == end)
return String.valueOf(start);
else{
return String.valueOf(start) + "->" + String.valueOf(end);
}
}
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> list = new ArrayList<String>();
if(nums.length == 0){
list.add(genString(lower, upper));
return list;
}
int left = lower, right = -1;
for(int i = 0; i < nums.length; i++){
right = nums[i];
if(i == 0){
if(left == right){
;
}
else if(left - right == -1){
list.add(String.valueOf(left));
}
else{
list.add(String.valueOf(left) + "->" + String.valueOf(right - 1));
}
left = right;
}
else{
if(left == right || left - right == -1){
;
}
else{
list.add(genString(left + 1, right - 1));
}
left = right;
}
}
if(left == upper){
;
}
else if(left - upper == -1){
list.add(String.valueOf(upper));
}
else{
list.add(String.valueOf(left + 1) + "->" + String.valueOf(upper));
}
return list;
}
}