转载自:http://blog.csdn.net/tyhj_sf/article/details/53769752

public class Test3 {public static void main(String[] args) {List<String> list1 = new ArrayList<>();list1.add("产地");list1.add("尺码");list1.add("重量");List<String> list2 = new ArrayList<>();list2.add("北京");list2.add("南京");list2.add("东京");List<String> list3 = new ArrayList<>();list3.add("1kg");list3.add("2kg");list3.add("3kg");List<List<String>> allList = new ArrayList<>();allList.add(list1);allList.add(list2);
//        allList.add(list3);List<List<String>> result = new ArrayList<>();long start = System.currentTimeMillis();
//        calculateCombination(allList, 0, new String[allList.size()]);calculateCombination(allList,result);long end = System.currentTimeMillis();System.out.println("共耗时:"+(end -start));System.out.println(result);System.out.println("共"+result.size()+"个规格");}/*** 方法1:递归* @param inputList* @param beginIndex* @param arr*/public  static void calculateCombination(List<List<String>> inputList, int beginIndex, String[] arr,List<List<String>> result) {if(beginIndex == inputList.size()){//在这里进行你自己的处理,比如打印组合的结果List<String> temp = new ArrayList<>();for (String i : arr) {temp.add(i);System.out.print(i+", ");}result.add(temp);System.out.println();return;}for(String c: inputList.get(beginIndex)){arr[beginIndex] = c;calculateCombination(inputList, beginIndex + 1, arr,result);}}/*** 算法二,非递归计算所有组合* @param inputList 所有数组的列表* */public  static void calculateCombination(List<List<String>> inputList,List<List<String>> result) {List<Integer> combination = new ArrayList<Integer>();int n=inputList.size();for (int i = 0; i < n; i++) {combination.add(0);}int i=0;boolean isContinue=false;do{List<String> temp = new ArrayList<>();//打印一次循环生成的组合for (int j = 0; j < n; j++) {temp.add(inputList.get(j).get(combination.get(j)));System.out.print(inputList.get(j).get(combination.get(j))+", ");}result.add(temp);System.out.println();i++;combination.set(n-1, i);for (int j = n-1; j >= 0; j--) {if (combination.get(j)>=inputList.get(j).size()) {combination.set(j, 0);i=0;if (j-1>=0) {combination.set(j-1, combination.get(j-1)+1);}}}isContinue=false;for (Integer integer : combination) {if (integer != 0) {isContinue=true;}}}while (isContinue);}
}

商品规格常用的规格排列组合算法相关推荐

  1. java 开发之商品规格属性(SKU)组合算法

    java 开发之商品规格属性(SKU)组合算法 开发背景 一般在开发商城的时候都会遇到商品规格组合的问题, 在这个开发过程中就需要一套算法用来组合多个规格属性,用来给每个组合定一组封面图和价格 比如某 ...

  2. 商品规格属性(SKU)组合算法

    借鉴java 开发之商品规格属性(SKU)组合算法_Runt02的博客-CSDN博客_java 商品属性 public List<LinkedHashMap<String, String& ...

  3. python 排列组合速度_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  4. 排列组合算法之二: 01转换法_java改变后的c++改进版

    http://blog.csdn.net/canguanxihu/article/details/46363375 排列组合算法之一: 01转换法_java改变后的c++版 class ZuheAss ...

  5. 排列 组合 算法(一)

    排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...

  6. python写排列组合_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  7. java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...

  8. js排列组合算法解决方案

    之前文章中谈过排列组合算法,主要事递归,代码如下 const arrangeCombination = arr => {const res = [], len = arr.length, inn ...

  9. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  10. js实现排列组合算法N选M

    JavaScript 从一个数组中拿出N个数(可放回),问共有多少种 今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下: function p(arr, N, ans){i ...

最新文章

  1. 最小割 ---- 集合冲突模型 ---- AGC038 F - Two Permutations[详解]
  2. Expo 快速开启之旅
  3. 20145201李子璇 《网络对抗》恶意代码分析
  4. Linux命令free解读
  5. boost::core模块实现范围枚举C++11
  6. 卷积神经网络精确率不增反降_深度学习 第四门课:卷积神经网络(Convolutional Neural Networks)...
  7. UOJ207 共价大爷游长沙
  8. Python 线程创建和传参 - Python零基础入门教程
  9. html给页面整体添加左右边距_HTML嵌入页面的几种方法
  10. centos6.5 安装mono
  11. 我的CSS笔记(一)
  12. win10系统用cadance画封装软件卡死问题
  13. Unity + Rider + EmmyLua使用中遇到的问题
  14. android去除gps漂移代码,GPS漂移过滤算法
  15. 短网址生成-nodejs实现
  16. canvas lineWidth为1时线条粗细和颜色
  17. 结合断线修复方法的乡村道路提取
  18. 龙格现象及分段线性插值
  19. 一个金融网站的SEO优化技巧案例
  20. 使用Wireshark抓包软件提示The NPF driver isn’t running解决办法

热门文章

  1. 进击的UI----------------(常见快捷键的使用)
  2. 物联网环境监测数据中心系统
  3. 苹果手机蓝框一直跳动
  4. 【汇正财经】什么是股权结构?
  5. IP地址(分类)、子网掩码、网络号、主机号、子网号
  6. Java单链表递归逆置
  7. js点击使内容变成可编辑状态
  8. 高级网格交易学习笔记
  9. oracle10g lsnrctl,linux下oracle10g lsnrctl没反应 sqlplus正常 bug4518443
  10. 实时折线图php mysql 源码_超级漂亮网址导航源码,自助链源码(PHP+MYSQL完整版)...