思路: 很简单,遍历数组,把missing range填满就好。这边注意int转string我应该单独写一个函数的,这样代码会清楚很多,也会少很多重读代码。看了别人代码给了我一个启发,这边应该用stringbuilder来构建答案效率会比较高。而不是每次都去生成一个新的string。下面展示代码:
class Solution {
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> list = new ArrayList<>();
if(nums.length == 0){
if(lower == upper){
list.add(Integer.toString(lower));
}else{
list.add(Integer.toString(lower) + "->" + Integer.toString(upper));
}
}
for(int i = 0; i < nums.length; i++){
if(i == 0){
if(nums[i] != lower){
if(nums[i] - lower == 1){
list.add(Integer.toString(lower));
}else{
int start = lower;
int end = nums[i] - 1;
list.add(Integer.toString(start) + "->" + Integer.toString(end));
}
}
}else{
if(nums[i] != nums[i - 1] + 1 && nums[i] != nums[i - 1]){
if(nums[i] - nums[i - 1] == 2){
int temp = nums[i - 1] + 1;
list.add(Integer.toString(temp));
}else{
int start = nums[i - 1] + 1;
int end = nums[i] - 1;
list.add(Integer.toString(start) + "->" + Integer.toString(end));
}
}
}
if(i == nums.length - 1 && nums[i] != upper){
if(upper - nums[i] == 1){
list.add(Integer.toString(upper));
}else{
int start = nums[i] + 1;
int end = upper;
list.add(Integer.toString(start) + "->" + Integer.toString(end));
}
}
}
return list;
}
}
总结:
- stringbuilder(append)可以用来高效搭建string。