位数求和(利用回溯法)

位数求和

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
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
08-18 15:23
点赞 评论 收藏
分享
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务