题解 | #数组分组#

数组分组

http://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

//参考网友ld1230的解法
//思想:将能整除3或者5的各自分为一组,记为sum1和sum2,剩余的保存在数组nums里
//现有两组,剩余nums里的数要么在sum1里要么在sum2里,利用递归依次放在sum1和sum2中
//最终nums里的数字全部放进去,若sum1 == sum2,则返回true,否则,返回false
let str;
while(str = readline()){
  let num = readline();
  let arr = num.split(' ');
  let three = arr.filter((v)=>{
    return v%3==0 && v%5!=0;
  })

  let five = arr.filter((v)=>{
    return v%5==0;
  })

  let other = arr.filter((v)=>{
    return v%5!=0 &&v%3!=0;
  })
  //所有三的倍数的数字的和
  let tsum = three.reduce((pre,cur)=>{
    return pre+cur*1;
  },0)
  //所有五的倍数的数字的和
  let fsum = five.reduce((pre,cur)=>{
    return pre+cur*1;
  },0)

  console.log(isExists(tsum,fsum,other,0))
}

function isExists(sum1,sum2,nums,index){
    if(index == nums.length && sum1 != sum2) return false;
    if(index == nums.length && sum1 == sum2) return true;
    if(index < nums.length) return isExists(sum1+parseInt(nums[index]), sum2, nums, index+1) || isExists(sum1, sum2+parseInt(nums[index]), nums, index+1);
    return false;
}
全部评论
最后一个function写得太漂亮了
点赞 回复 分享
发布于 2022-09-26 21:19 江西

相关推荐

小叮当411:应该是1-3个月吧
点赞 评论 收藏
分享
06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务