Javascript的数组与字符串的混合算法

Codewar的Range Extraction

kata4

描述:

表示正序整数数组使用逗号将任意一个整数分隔开

  • 单个整数
  • 或者一个整数范围,从开始到结束之间用"-“分隔。范围包括区间内包括两端的所有整数。它只有跨越至少3个数字才能被判定为是一个范围。例如"12,13,15-17”

给出解决方案,使其能接收一个为递增顺序排列的整数数组,并以正序的格式返回格式化正确的字符串。

示例:

solution([-10, -9, -8, -6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]);
// returns "-10--8,-6,-3-1,3-5,7-11,14,15,17-20"
solution([-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]);
// returns "-6,-3-1,3-5,7-11,14,15,17-20"

我的解决方案:

function solution(list) {
    // TODO: complete solution
    let arr = []
    list.map((item, i) => {
        if (list[i - 1] + 1 === item && list[i + 1] === item + 1) {
            item = '&'
        }
        arr = [...arr, item]
    })
    let str = arr.join(',').replace(/(,&,)|(,&)|(&,)/g,'&').replace(/(&)(\1)+/g,'-').replace(/&/g,'-')
    return str
}

我认为的最佳方案:

function solution(list){
   for(var i = 0; i < list.length; i++){
      var j = i;
      while(list[j] - list[j+1] == -1) j++;
      if(j != i && j-i>1) list.splice(i, j-i+1, list[i] +'-'+list[j]);
  }
  return list.join();
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BB_zhan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值