1. 程式人生 > >2018/11/22

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); }