/**
 * 尝试获取arr子集 y  使 x=Σy
 * @param {Array} arr 
 * @param {number} x 
 * @param {Array} res 
 */
function tryVisit(arr, x, res) {
   res = res || arr.map(m => { return { x: x - m, item: [m] } });
   ; ri < res.length; ri++) {
      const rr = res[ri];
      let toDel = true;
      ; i < arr.length; i++) {
         const item = arr[i];
         if (contains(rr.item, item)) continue;
         let diff = rr.x - item;
         ) { }
         ) {
            rr.item.push(item)
            rr.x = diff;
         }
         else {
            rr.item.push(item);
            console.log(rr.item.join(','))
            return rr.item;
         }
         toDel = false;
      }
      if (toDel) res[ri] = undefined;
      else res[ri] = rr;
   }
   let toVisit = res.filter(m => m != undefined);
   ) , toVisit)
}
/**
 * arr 中是否包含 tag
 * @param {Array} arr 
 * @param {*} tag 
 */
function contains(arr, tag) {
   ; j < arr.length; j++) {
      const r = arr[j];
      if (r == tag) {
         return true;
      }
   }
}
function main() {
   , , , , , , , , , ];
   ;
   //test
   console.log('test:每种方法都测试一下');
   tryVisit(tag, v) && tryVisit(tag.reverse(), v) && tryVisit(tag.sort((m,n) => m-n), v) && tryVisit(tag.sort((m,n) => n-m), v);
   //正序倒序、乱序、默认排序 等 多种尝试 比如 如果目标数是偶数 就按照奇数偶数排序试一下
   console.log('use:只取一个');
   , , , , , , , , , ];
   let res = tryVisit(tag, v) || tryVisit(tag.reverse(), v) || tryVisit(tag.sort((m,n) => m-n), v) || tryVisit(tag.sort((m,n) => n-m), v);
}
main();

理论上尝试次数越多函数失效的可能性越少,我列出了 排序不排序和他们的反转情况

/**
 * 尝试获取arr子集 y  使 x=Σy
 * @param {Array} arr 
 * @param {number} x 
 * @param {Array} res 
 */
function tryVisit(arr, x, res) {
   res = res || arr.map(m => { return { x: x - m, item: [m] } });
   ; ri < res.length; ri++) {
      const rr = res[ri];
      let toDel = true;
      ; i < arr.length; i++) {
         const item = arr[i];
         if (contains(rr.item, item)) continue;
         let diff = rr.x - item;
         ) { }
         ) {
            rr.item.push(item)
            rr.x = diff;
         }
         else {
            rr.item.push(item);
            console.log(rr.item.join(','))
            return rr.item;
         }
         toDel = false;
      }
      if (toDel) res[ri] = undefined;
      else res[ri] = rr;
   }
   let toVisit = res.filter(m => m != undefined);
   ) , toVisit)
}
/**
 * arr 中是否包含 tag
 * @param {Array} arr 
 * @param {*} tag 
 */
function contains(arr, tag) {
   ; j < arr.length; j++) {
      const r = arr[j];
      if (r == tag) {
         return true;
      }
   }
}
function main() {
   , , , , , , , , , ];
   ;
   //test
   console.log('test:每种方法都测试一下');
   tryVisit(tag, v) && tryVisit(tag.reverse(), v) && tryVisit(tag.sort((m,n) => m-n), v) && tryVisit(tag.sort((m,n) => n-m), v);
   //正序倒序、乱序、默认排序 等 多种尝试 比如 如果目标数是偶数 就按照奇数偶数排序试一下
   console.log('use:只取一个');
   , , , , , , , , , ];
   let res = tryVisit(tag, v) || tryVisit(tag.reverse(), v) || tryVisit(tag.sort((m,n) => m-n), v) || tryVisit(tag.sort((m,n) => n-m), v);
}
main();

最新文章

  1. XStream xml 解析框架使用笔记
  2. 视频演示eworkflow集成定制aspx页面的过程
  3. 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
  4. Mac下同时安装多个版本的JDK
  5. Python正则表达式模块(re模块)
  6. 历代诗词咏宁夏注释3----蔡升元:&lt;题大清渠&gt;
  7. cdoj 71 I am Lord Voldemort 水题
  8. Mysql数据库中的计数器表实时更新
  9. iOS 构造方法
  10. ThinkPHP函数详解:cookie方法
  11. Codevs 3990 中国余数定理 2
  12. mybatis入门,基本案例和xml讲解
  13. Windows 端口和任务 查看 相关命令
  14. java的大数类
  15. 跨服务器查询sql (摘要)
  16. CentOS 下网络报错 Device eth0 does not seem to be present
  17. PHP 领域逻辑与数据库映射
  18. python之pygal:掷两个不同的骰子并统计大小出现次数
  19. [转] 在 Windows 中让任务栏时间显示&ldquo;秒&rdquo;
  20. word2vec 的理解

热门文章

  1. maven环境隔离
  2. 2018-8-10-C#-代码占用的空间
  3. Python--day36--操作系统的作用;多道技术;
  4. async和await的执行顺序问题
  5. H3C生成树的不足
  6. Linux 内核 usb_control_msg 接口
  7. codeforces 600E E. Lomsat gelral (线段树合并)
  8. docker运行容器后agetty进程cpu占用率100%
  9. Android 隐藏顶部菜单栏
  10. TextInputLayout低版本bug :“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”