0
点赞
收藏
分享

微信扫一扫

算法沉淀——动态规划之01背包问题(leetcode真题剖析)

殇感故事 2024-03-09 阅读 9
package net.yto.com.testplatform;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;

public class TestMain {
    public static void main(String[] args) {
        TestMain testMain = new TestMain();
        List<String> templates = new ArrayList<>();
        templates.add("${org_name}的业务量是多少?");//2
        templates.add("${time}${org_name}的业务量是多少");//2*3=6
        templates.add("${time}${org_name}${max}的业务量是多少");//2*3*2=12
        List<String> orgnameList = new ArrayList<>();
        orgnameList.add("北京");
        orgnameList.add("上海");
        List<String> timeList = new ArrayList<>();
        timeList.add("昨天");
        timeList.add("今天");
        timeList.add("今年");
        List<String> maxList = new ArrayList<>();
        maxList.add("最大");
        maxList.add("前三");


        List<String> resultList = new ArrayList<>();
        for (String template : templates) {
            testMain.makeData(template, resultList, orgnameList, timeList, maxList);
        }
        System.out.println(resultList.size());
        System.out.println(JSON.toJSONString(resultList, true));

    }

    /** 根据模板和变量值列表
     * @param template    模板
     * @param testList    生成的用例集合
     * @param orgnameList 组织列表
     * @param timeList    时间列表
     * @param maxList     极值列表
     */
    public void makeData(String template, List<String> testList, List<String> orgnameList, List<String> timeList, List<String> maxList) {
        //递归终止条件:
        if (!template.contains("$")) {
            return;
        }
        //替换org_name
        if (template.contains("${org_name}")) {
            List<String> casesList = makeCases(template, "${org_name}", orgnameList);
            for (String case1 : casesList) {
                if (case1.contains("$")) {
                    makeData(case1.replace("${org_name}", ""), testList, orgnameList, timeList, maxList);
                } else {
                    testList.add(case1);
                }
            }
            //替换max
        } else if (template.contains("${max}")) {
            List<String> casesList = makeCases(template, "${max}", maxList);
            for (String case1 : casesList) {
                if (case1.contains("$")) {
                    makeData(case1.replace("${max}", ""), testList, orgnameList, timeList, maxList);
                } else {
                    testList.add(case1);
                }
            }
            //替换time
        } else if (template.contains("${time}")) {
            List<String> casesList = makeCases(template, "${time}", timeList);
            for (String case1 : casesList) {
                if (case1.contains("$")) {
                    makeData(case1.replace("${time}", ""), testList, orgnameList, timeList, maxList);
                } else {
                    testList.add(case1);
                }
            }

        } else {
            return;
        }

    }

    /**
     * 具体生成用例方法,实际可以根据指标对应的组织来生成
     *
     * @param template      模板
     * @param param         变量
     * @param paramDataList 变量的值列表
     * @return
     */
    public List<String> makeCases(String template, String param, List<String> paramDataList) {
        List<String> casesList = new ArrayList<>();
        String temp = template;
        for (String paramData : paramDataList) {
            casesList.add(temp.replace(param, paramData));
        }
        return casesList;
    }
}
 生成结果

20条数据

[
	"北京的业务量是多少?",
	"上海的业务量是多少?",
	"昨天北京的业务量是多少",
	"今天北京的业务量是多少",
	"今年北京的业务量是多少",
	"昨天上海的业务量是多少",
	"今天上海的业务量是多少",
	"今年上海的业务量是多少",
	"昨天北京最大的业务量是多少",
	"今天北京最大的业务量是多少",
	"今年北京最大的业务量是多少",
	"昨天北京前三的业务量是多少",
	"今天北京前三的业务量是多少",
	"今年北京前三的业务量是多少",
	"昨天上海最大的业务量是多少",
	"今天上海最大的业务量是多少",
	"今年上海最大的业务量是多少",
	"昨天上海前三的业务量是多少",
	"今天上海前三的业务量是多少",
	"今年上海前三的业务量是多少"
]
举报

相关推荐

0 条评论