Commit 1a4c15d69ed4d09908eee8a3fe486c5914ca6c9e

Authored by pengye
1 parent 30971230

输入金额/满减金额 计算最优组合问题处理

... ... @@ -551,6 +551,7 @@ Page({
let finalList = []; //最终用的优惠券组合
// 计算可叠加的组合
let closestSum = -Infinity; // 最接近或等于输入值的和
let descSum = 0;//满减金额之和
function backtrack(startIndex, currentCombination, currentSum,couponCount) {
// 如果当前和等于输入值,直接返回
if (currentSum == amount) {
... ... @@ -568,14 +569,16 @@ Page({
const obj = validCoupons[i];
if (obj.accumulationShow == '1') { // 仅考虑可叠加的优惠券
if (currentSum*1 + obj.price*1 > amount) continue; // 如果当前和已经超过输入值,跳过
let kyNum = Math.floor(amount/parseFloat(obj.desc))
if (amount - obj.price*1 >= 0&&(!couponCount[obj.aid]||couponCount[obj.aid] < kyNum)) {
couponCount[obj.aid] = (couponCount[obj.aid] || 0) + 1; // 更新使用次数
currentCombination.push(obj); // 添加当前数字到组合
backtrack(i + 1, currentCombination, currentSum*1 + obj.price*1,couponCount); // 递归
currentCombination.pop(); // 回溯
couponCount[obj.aid]--; // 回溯时减少使用次数
}
descSum += obj.desc*1;
let remainingPrice = amount - descSum;//输入金额 - 总满减条件金额
let kyNum = Math.floor(remainingPrice/parseFloat(obj.desc))
if (amount - obj.price*1 >= 0&&(!couponCount[obj.aid]||couponCount[obj.aid] < kyNum) && kyNum>-1) {
couponCount[obj.aid] = (couponCount[obj.aid] || 0) + 1; // 更新使用次数
currentCombination.push(obj); // 添加当前数字到组合
backtrack(i + 1, currentCombination, currentSum*1 + obj.price*1,couponCount); // 递归
currentCombination.pop(); // 回溯
couponCount[obj.aid]--; // 回溯时减少使用次数
}
// 提前退出:如果当前和加上当前数字已经小于输入值,后续的数字也会更小
if (currentSum*1 + obj.price*1 < amount) break;
}
... ...