理解题意就好做了 ^ ^
题目:
给定一个 无重复元素 的 有序 整数数组
nums
。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,
nums
的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于nums
的数字x
。列表中的每个区间范围
[a,b]
应该按如下格式输出:
"a->b"
,如果a != b
"a"
,如果a == b
红色字咋一看,没有看懂 ~,其实就是:
如果是一个区间,则区间的两头中间包含的所有数字都在nums中,包含边界
如果不是一个区间,只是一个数字 x,则这个数字在nums中,不存在 x - 1, 或 x + 1
/*
* @lc app=leetcode.cn id=228 lang=java
*
* [228] 汇总区间
*/
// @lc code=start
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> ans = new ArrayList<>(nums.length);
// 临时 buff
StringBuilder buff = new StringBuilder();
for(int i = 0; i < nums.length; ){
// 当前区间的开始数字
int startNum = nums[i];
int j = 1;
for(; j + i < nums.length; j++){
// 不连续则直接跳出
if(startNum + j != nums[j + i]){
break;
}
}
// 区间开始数字
buff.append(startNum);
/**
* 如果不存在连续数字,或则走到数组的尽头 j 都会 等于 1
*/
if(j > 1){
// 存在区间结束数字
buff
.append("->")
.append(nums[i + j - 1]);
}
// 放入结果
ans.add(buff.toString());
// 清空buff
buff.setLength(0);
i += j;
}
return ans;
}
}
// @lc code=end