下午js群里在讨论一个问题。
function a(n){
var arr = [];
for (var a = 0; a < 10; a ++){
for (var b = 0; b < 10; b ++){
for (var c = 0; c < 10; c ++){
if(a+b+c == n){
arr.push([a,b,c])
}
}
}
}
return arr;
}
console.log(a(4));请问,这样一个算3位和值的函数,有没有方法写成任意位数的?
输出:
我的解决方案:
//获取n的所有位的和。
function getSum(n){
var y=0;
n = parseInt(n);
while(n>=1 && (n%10>=1 || n%10 == 0)){
y = n%10+y;
n = parseInt(n/10);
}
return y;
}
//num如果不足n位,前端补0.
function addZero(num,n){
var zeroNum = n-num.toString().length;
var itemString='';
while(zeroNum--){
itemString+='0';
}
return itemString+num;
}
//n位求和sum。
function b(sum,n){
var resString,resArr=[],res=[],item,itemArr=[];
var all = Math.pow(10,n) - 1;
for (var i = 0; i <= all; i++) {
item = getSum(i);
if(item == sum){
resString = addZero(i,n);
resArr.push(resString.split(""));
}
}
console.log(JSON.stringify(resArr));
}
b(36,5);
b(4,3);
题主优化后:
function bb(sum,n){
var resString,resArr=[],item;
var all = Math.pow(10,n);
for (var i = 0; i < all; i++) {
item = i.leftpad(n, 0).split('').reduce(function(a,b){return parseInt(a)+parseInt(b);});
if(item == sum){
resString = i.leftpad(n, 0);
resArr.push(resString.split(''));
}
}
return resArr;
}不过这种解决也就只限于题目中的每一位都是0-9这种情况。

本文深入探讨了一个用于计算三位和的函数,并提出了将其扩展为任意位数的方法。通过优化和实现,作者展示了如何在满足特定条件的情况下生成所有可能的组合。文章不仅介绍了基本的实现思路,还提供了进一步的优化策略,如位数不足时的前导零补全,以及一种简洁的代码实现方式。此外,文章还讨论了此类问题在实际应用中的限制,特别关注于每位数限定在0-9之间的场景。

5045

被折叠的 条评论
为什么被折叠?



