- 整数形式
- 一组整数,由范围内的起始整数与结束整数用破折号'-'分隔。范围包括区间内的所有整数,包括两个端点。连续的数字要求必须跨越3个数。例如(“12,13,15 -17”)
完成解决方案,使其按递增顺序获取整数列表,并以范围格式返回格式正确的字符串。
例:
solution([-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]);
return "-6,-3-1,3-5,7-11,14,15,17-20"
思路:首先我们可以计算出每个数与前一个数的差,如果连接的差连续两个为1,则证明这3个数是个连续的数。这里可以将差值插入到这两个数之间。例如:
假设原字符串为'124'
那么插入差值后新字符串为'11224'
这个时候为了不混淆原字符串,可以给这些差值一个标识。比如"@"标识这两数之间差1,反之则用"!"符号。
最后替换掉连续以"@"符号连接的数字即可:
function solution(list){
let newList = [];
for(let item = 0; item < list.length - 1; item++) {
// 将 原数组 和 彼此之间的差值 两两穿插合成一个新字符串,如果是相差1则插入@,反之则插入!
newList.push(list[ item ], list[ item + 1 ] - list[ item ] === 1 ? '@' : '!')
}
// 最后一个数没有尾端的差值,因此直接插入即可
newList.push(list[ list.length -1 ]);
// 将连续三个连着@的值转化为'-'连接的形式,最后再去除@和!符号
return newList.join('').replace(/(-?\d*)@(-?\d*@)+(-?\d*)/g, '$1-$3').replace(/[@!]/g, ',');
}