题目
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"].
大致意思
给定一个数组,把他们之前连续的数字进行合并
解决方案
- 进行遍历整个数组
- 根据三个数值进行比较,
start pre data
- 一开始的时候,将数组的第一个元素赋给
start 和 pre
var start = nums[0];
var pre = start;
我们在循环遍历的时候,根据
data - pre != 1
的判断,判断是否整个数据是连续的。- 如果是连续的话,我们持续遍历,将
pre = data
- 如果不是连续的话,我们将
start 和 pre
push进大数组中去 - 这里我们需要判断,如果
start === pre
的话,push一个即可
- 如果是连续的话,我们持续遍历,将
function pushValue(start, pre, array) {
if (pre === start) {
array.push([pre])
} else {
array.push([start, pre]);
}
}
- 遍历完所有之后,需要再次进行
pushValue(start, pre, array);
- 最后遍历输出所需要的数据结构
var arr = array.map((d) => {
return d.join('->');
});
源代码
var summaryRanges = function(nums) {
if (!nums.length) return [];
var array = [];
var start = nums[0];
var pre = start;
var data;
for (var i = 1, l = nums.length; i < l; i++) {
data = nums[i];
if (data - pre != 1) {
pushValue(start, pre, array);
start = data;
}
pre = data;
}
pushValue(start, pre, array);
var arr = array.map((d) => {
return d.join('->');
});
return arr;
};
function pushValue(start, pre, array) {
if (pre === start) {
array.push([pre])
} else {
array.push([start, pre]);
}
}