2018/11/22

每天一题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);
}

猜你喜欢

转载自www.cnblogs.com/guiyuan123/p/10000933.html
今日推荐