位数求和(利用回溯法)
位数求和
https://ac.nowcoder.com/acm/contest/6220/A
链接:https://ac.nowcoder.com/acm/contest/6220/A
牛牛想知道所有的长度为n的数中,各个位上的数字之和为m的这些数的和是多少呢。给定n和m,求这些数的和。
利用回溯法
/** * 返回这样的数之和 * @param n int整型 数的长度 * @param m int整型 各个为之和 * @return long长整型 */ function sum( n , m ) { // write code here let path = [] let first = true let res = 0; let check = (num)=>{ let ans = 0; for(let i=0;i<num.length;i++){ ans+=num[i] } if(ans==m){ return true; }else{ return false; } } let backtrack = () => { if(path.length==n){ let flag = check([...path]) if(flag){ res+=parseInt(path.join('')) return } }else if(path.length>n){ return } for(let i=0;i<10;i++){ if(first){ first=false; continue; } path.push(i); backtrack(); path.pop() } } backtrack(); return res; } module.exports = { sum : sum };