猿问

如何写一个方法分析出一个正整数的和的所有可能性?

比如一个函数


let plus = (num)=>{

    //方法

}


plus(10)


返回的结果是这样:


10 = 1+9;

10 = 1+2+3+4;

10 = 4+6;

总之就是返回这个参数所有的可能性。这个plus函数应该怎么写比较合适?


我的想法是用遍历一个[1,2,3,4,5,6,7,8,9,10]这样的数组,但是只能遍历固定的层数,比如说两层,三层,但是这样十分不灵活,求指教。


慕田峪9158850
浏览 488回答 2
2回答

SMILET

哎,好吧。Mask同学看出了问题,的确,那天写答案已经很晚就没有做去重。还是被人发现了。。。?现在补上。const num = 10const statck = []const obj = {}const pow = num => num ** numfunction reduce(upper, before = []) {&nbsp; &nbsp; for (let i = 1; i <= upper / 2; i++) {&nbsp; &nbsp; &nbsp; &nbsp; const diff = upper - i&nbsp; &nbsp; &nbsp; &nbsp; const arr = [i, diff, ...before]&nbsp; &nbsp; &nbsp; &nbsp; const id = arr.map(pow).reduce((pre, cur) => pre + cur)&nbsp; &nbsp; &nbsp; &nbsp; if (!obj[id]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; statck.push(arr)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj[id] = 1&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (diff > 1) reduce(diff, [...before, i])&nbsp; &nbsp; }}reduce(num)const result = statck.map(a => '10 = ' + a.join(' + '))console.log(result)一共41种。

素胚勾勒不出你

我现在想到的最快的方法应该是找到Z=1+2+3+...+X。。然后把1,2,3,...,X,做一个遍历和的组合,去掉有重复数字的,就应该是你想要的答案了。。比如10=1+2+3+4。。然后你就找到1,2,3,4的遍历和的组合。。1. 1,2=3 3+4+3 (重复数字)2. 1,3=4 2+4+4 (重复数字)3. 1,4=5 2+3+54. 1,2,3=6 4+65. 1,2,4=7 3+76. 1,3,4=8 2+88. 2,3=5 1+4+59. 2,4=6 1+3+610. 2,3,4=9 1+9...这样子的形式。。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答