美文网首页
假设有任意多张面额为 2 元、3 元、7 元的货币,现要用它们凑

假设有任意多张面额为 2 元、3 元、7 元的货币,现要用它们凑

作者: 前端_高手 | 来源:发表于2021-01-06 22:41 被阅读0次

    一个问题js实现

    暴力循环求解

    function change4() {
       var count = 0;
       for (let i = 0; i <= (100 / 7); i++) {
           for (let j = 0; j <= (100 / 3); j++) {
               for (let k = 0; k <= (100 / 2); k++) {
                   if (i * 7 + j * 3 + k * 2 == 100) {
                       count += 1;
                   }
               }
           }
       }
       console.log(count);
    }
    

    缺点:时间复杂度高可扩展性差,如果是100种货币就需要100层循环

    线性规划法

    function change3(aim, penny) {
       var res = 0;
       function _cal(newAim, penny) {
           const newPenny = penny.slice(); // 这里一直是用的同一个数组,要拷贝一份,否则循环两次就pop空了
           var cur = newPenny.pop();
           for (let i = 0, num = newAim/cur; i<= num; i++) {
               const left = newAim - cur*i;
               if (left === 0) {
                   res++;
               }
               else {
                   newPenny.length > 0 && left > 0 && _cal(left, newPenny)
               }
           }
       }
       _cal(aim, penny);
       return res;
    }
    change3(100, [2,3,4]);
    

    缺点:调用栈可能溢出

    线性规划法想办法改成循环的方式

    TODO

    相关文章

      网友评论

          本文标题:假设有任意多张面额为 2 元、3 元、7 元的货币,现要用它们凑

          本文链接:https://www.haomeiwen.com/subject/tmxaoktx.html