每天一题js
表示有序整数列表的格式是使用逗号分隔的列表
- 个别整数
- 或者由起始整数表示的整数范围,用短划线“ - ”分隔范围内的结束整数。范围包括区间中的所有整数,包括两个端点。除非它跨越至少3个数字,否则它不被视为范围。例如(“12,13,15-17”)
完成解决方案,使其按递增顺序获取整数列表,并以范围格式返回格式正确的字符串。
简单来讲其实就是,提供一个从小到大排序的数组,数组中出现三个数或者三个数以上连续的部分,用 - 省略,如 11,12,,13 等价于 11-13,不连续的数直接显示,返回一个字符串用逗号分隔每一组数。
function solution(list){ // 数组 把超过三个顺序 数间隔只差1的数进行 连接 // 1.判定至少三个数是否连续 1.1 连续在判定接下去的数是否仍然连续 -> 直到不连续停止 // 2.对连续的数 捕捉,把捕捉到的数进行处理 我觉得在搞一个数组比较靠谱 let ret = ''; let begin = 0; let end = 0; list.forEach((i,index,arr)=>{ //如果前一个数等于后一个数 那么就对计数器累加 若不等,则输出 字符 if(arr[index]+1 === arr[index+1]){ end++; }else{ //因为计数器从0开始 那么0-2就是三位 就可以进入这个处理 if(end>=2){ //index-end 确定了开始计数的字符串位置 ret += arr[index-end] + '-' + arr[index] + ','; end = 0; }else{ ret += (arr.slice(index-end,index+1)).join(',')+","; end = 0; } } }) return ret.slice(0,ret.length-1); }