首先,先简单解释一下笛卡尔积。

现在,我们有两个集合A和B。

A = {0,1}     B = {2,3,4}

集合 A×B 和 B×A的结果集就可以分别表示为以下这种形式:

A×B = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)};

B×A = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)};

以上A×B和B×A的结果就可以叫做两个集合相乘的‘笛卡尔积’。

程序实现


public class Solution {public List<List<String>> descartes(List<List<String>> dimValue) {List<List<String>> res = new ArrayList<>();if (dimValue == null || dimValue.size() == 0)return res;backtrace(dimValue, 0, res, new ArrayList<>());return res;}/*** 递归回溯法求解** @param dimValue 原始数据集合* @param index 当前执行的集合索引* @param result 结果集合* @param curList 当前的单个结果集*/private void backtrace(List<List<String>> dimValue, int index,List<List<String>> result, List<String> curList) {if (curList.size() == dimValue.size())result.add(new ArrayList<>(curList));elsefor (int j = 0; j < dimValue.get(index).size(); j++) {curList.add(dimValue.get(index).get(j));backtrace(dimValue, index + 1, result, curList);curList.remove(curList.size() - 1);}}

测试方法

public static void main(String[] args) {List<String> list1 = new ArrayList<String>();list1.add("a");list1.add("b");List<String> list2 = new ArrayList<String>();list2.add("0");list2.add("1");list2.add("2");List<List<String>> dimValue = new ArrayList<List<String>>();dimValue.add(list1);dimValue.add(list2);// 递归实现笛卡尔积Solution s = new Solution();List<List<String>> res = s.descartes(dimValue);System.out.println("递归实现笛卡尔乘积: 共 " + res.size() + " 个结果");for (List<String> list : res) {for (String string : list) {System.out.print(string + " ");}System.out.println();}}

结果

递归实现笛卡尔乘积: 共 6 个结果
a 0
a 1
a 2
b 0
b 1
b 2 

笛卡尔积 笛卡尔机 笛卡儿积(笛卡尔积)相关推荐

  1. python笛卡尔_Python 计算笛卡尔积

    Python 计算笛卡尔积 计算多个集合的笛卡尔积,有规律可循,算法和代码也不难,但是很多语言都没有提供直接计算笛卡尔积的方法,需要自己写大段大段的代码计算笛卡尔积,python 提供了一种最简单的计 ...

  2. java 笛卡尔积_笛卡尔乘积-java代码

    好久没摸过程序了,重新捡起java写了个笛卡尔乘积算法.自我感觉非常精简通用,这算是码力不减,码刀不老? package my.table; import java.util.Arrays; publ ...

  3. mysql 迪卡尔运算_「笛卡尔乘积」mysql笛卡儿积 - seo实验室

    笛卡尔乘积 1.笛卡儿积数学理解 A={2,3} :B= {0,2,4} AxB = {(2,0),(3,0),(2,2),(3,2),(2,4),(3,4)},则AxB的结果集既是笛卡儿积: 但其不 ...

  4. 运算法则(笛卡尔乘积)

    运算法则(笛卡尔乘积) 数学中,两个集合X和Y的笛卡儿积(Cartesian product),又称直积,表示为X × Y,是其第一个对象是X的成员而第二个对象是Y的一个成员的所有可能的有序对. 假设 ...

  5. 使用Java8新特性(stream流、Lambda表达式)实现多个List 的笛卡尔乘积 返回需要的List<JavaBean>

    需求分析: 有两个Long类型的集合 : List<Long> tagsIds; List<Long> attributesIds; 现在需要将这两个Long类型的集合进行组合 ...

  6. 克罗内克积(Kronecker product)与笛卡尔乘积(Cartesian product)

    数学上,克罗内克积是两个任意大小的矩阵间的运算. 假设A为mxn的矩阵,B为pxq的矩阵. ,. 在进行计算的时候,克罗内克积可表示为,为mpxnq大小的矩阵.在MATLAB中可以使用kron函数. ...

  7. SQL中的笛卡尔你真的懂吗?

    原文链接:https://www.cnblogs.com/CareySon/archive/2010/04/13/1711095.html 什么是笛卡尔积? 笛卡尔积是指在数学中,两个集合X和Y的笛卡 ...

  8. 【Python】求笛卡尔乘积

    在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员.假设集合A={a,b},集合 ...

  9. python笛卡尔心脏线绘制_python 笛卡尔

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 具体代码如下:def cp_a(a): def _multi(b): retur ...

最新文章

  1. Python逻辑运算符 and ,or not 的理解
  2. App Tracking Transparency被拒解决
  3. 自动生成WebForm中对实体类的编辑页面
  4. 三菱d700变频器接线图_图解PLC与变频器通讯接线
  5. LeetCode 583. 两个字符串的删除操作(动态规划)
  6. MathType使用中的四个小技巧
  7. 开启3389常用终端命令
  8. 基础服务系列-Hyper-V 安装centos7
  9. java使用谷歌验证码google captcha
  10. java微信支付,企业微信号转账给个人
  11. 彼得·林奇的 PEG 估值策略
  12. Android Studio编译错误:Suggestion: use tools:overrideLibrary=xxx.xxx.xxx to force usage
  13. ESP8266_CH340G串口自动下载固件库原理
  14. Canvas箭头动画
  15. 多机器人编队人工势场法协同避障算法原理及实现
  16. 两种方式读取Json文件 数据
  17. java经典问题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
  18. 验证码由字符转换图片
  19. VUE 百度离线地图的下载与使用
  20. 数字金字塔 (15 分)

热门文章

  1. Vue高仿网易云网页端源码
  2. 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项
  3. RGB转8色16色256色
  4. 用python来玩科学计算
  5. 回调函数,回调函数,回调函数,什么是回调函数
  6. 2021年Funcode游戏制作二等奖作品
  7. vb microsoft html object library,HTML对象库简介(Microsoft HTML Object Library - mshtml.tlb)...
  8. sketch八个高效的快捷方式(上)
  9. Java网络编程(四)—— ServerSocket(一)
  10. sublime text3 多窗口打开设置