下午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));
我的解决方案:
//获取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这种情况。