一个小算法记录

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

下午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这种情况。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值