问答题1010/1588实现以下转换,合并连续的数字

[1,2,3,4,6,7,9,13,15]=>['1->4','6->7','9','13','15']

难度:
2022-09-27 创建

参考答案:

本题是一道比较简单的数组处理题目,主要有两个处理步骤:

  • 将超过一个的连续数字元素,合并成 x->y,比如 [1,2,3,4] 转成 ['1->4']
  • 将非连续的数字元素,转成字符串

具体的实现代码如下:

1function shortenArray(arr) { 2 // 处理边界 3 if (!Array.isArray(arr) || arr.length <= 1) { 4 return arr; 5 } 6 7 // 记录结果 8 const result = []; 9 10 // 记录连续数字的开始位置 11 let start = 0; 12 // 记录连续数字的结束位置 13 let last = 0; 14 15 function pushArr(arrStart, arrEnd) { 16 if (arrStart === arrEnd) { 17 result.push(arr[arrStart].toString()); 18 } else { 19 result.push(`${arr[arrStart]}->${arr[arrEnd]}`); 20 } 21 } 22 23 // 一次循环获取结果 24 for (let i = 1; i < arr.length; i++) { 25 const temp = arr[i]; 26 if (arr[last] + 1 === temp) { 27 last = i; 28 } else { 29 pushArr(start, last); 30 start = i; 31 last = i; 32 } 33 } 34 35 // 处理剩余数据 36 pushArr(start, last); 37 38 return result; 39} 40 41shortenArray([1, 2, 3, 4, 6, 7, 9, 13, 15]); // ['1->4','6->7','9','13','15']

最近更新时间:2024-07-20

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!