qt-n个数组实现排列组合
例如:现在有一批鞋子,其中颜色有[‘白色’,‘黑色’,‘灰色’];大小有[‘40’,‘41’,‘42’],样式有[‘板鞋’,‘运动’,‘休闲’],要求写一个算法,实现[[‘白色’,‘40’,‘板鞋’], [‘白色’,‘42’,‘休闲’] …]这样的组合
代码如下
QList<QVector<QPointF>> xx::getAllGroup(QList<QVector<QPointF>> val){
int oriSize = val.size();
QVector<int> tempIndexArr(oriSize);
tempIndexArr[oriSize - 1] = -1;
QVector<int> tempLengthArr(oriSize);
for (int i = 0; i < oriSize; i++){
tempLengthArr[i] = val[i].size();
}
QList<QVector<QPointF>> newList;
bool completeFlag = false;
while (!completeFlag){
int changeIndex = val.size() - 1;
bool isRightIndex = false;
while (!isRightIndex){
tempIndexArr[changeIndex] += 1;
if (tempIndexArr[changeIndex] >= tempLengthArr[changeIndex]){
if (changeIndex == 0){
isRightIndex = true;
completeFlag = true;
}
else{
tempIndexArr[changeIndex--] = 0;
}
}
else{
isRightIndex = true;
}
}
if (isRightIndex && !completeFlag){
QVector<QPointF> pointVec;
for (int i = 0; i != val.size(); i++){
pointVec.push_back(val[i][tempIndexArr[i]]);
}
newList.push_back(pointVec);
}
}
return newList;
}
原文来自微信公众号"程序员成长日志",已经工作的程序员朋友可以关注下公众号“程序员成长日志”,分享日常工作中解决的问题即可赚取稿费,大家一起成长~

qt-n个数组实现排列组合的更多相关文章
- js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合
现在有一批手机,其中颜色有['白色','黑色','金色','粉红色']:内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[[ ...
- 不固定个数组,进行一一对应的组合,js将多个数组实现排列组合
var arr = [ ["a", "b"], ["1", "2"], ["d"] ]; var s ...
- N个数组中所有元素的排列组合(笛卡尔积)算法
(1)N个数组对象中所有元素排列组合算法 private List<List<Object>> combineAlg(List<Object[]> nArray) ...
- 数组排列组合问题——BACKTRACKING
BACKTRACKING backtracking(回溯法)是一类递归算法,通常用于解决某类问题:要求找出答案空间中符合某种特定要求的答案,比如eight queens puzzle(将国际象棋的八个 ...
- 给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合
给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合 ruby代码: def all_possible_arr arr, length = 5 ret = [] leng ...
- JavaScript 二维数组排列组合2
<html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...
- JavaScript 递归法排列组合二维数组2
<html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...
- JavaScript 递归法排列组合二维数组
<html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...
- JavaScript 二维数组排列组合
<html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...
随机推荐
- DLL/OCX文件的注册与数据执行保护DEP
注册/反注册dll或ocx文件时,无论是用regsvr32还是DllRegisterServer/DllUnregisterServer,可能会遇到[内存位置访问无效]的问题: 此时把操作系统的数据执 ...
- Spring Cloud 系列之 Gateway 服务网关(四)
本篇文章为系列文章,未读第一集的同学请猛戳这里: Spring Cloud 系列之 Gateway 服务网关(一) Spring Cloud 系列之 Gateway 服务网关(二) Spring Cl ...
- Java 多线程 -- 线程安全 双重检测(double checking)
先看一个经典的12306案例: public class SynBlockTest { public static void main(String[] args) { // 一份资源 SynWeb1 ...
- 大数据并行计算框架Spark
Spark2.1. http://dblab.xmu.edu.cn/blog/1689-2/ 0+入门:Spark的安装和使用(Python版) Spark2.1.0+入门:第一个Spark应用程序: ...
- 从零开始装CentOS以及配置Redis,前端都可以!!!
##### 从零开始装CentOS以及配置Redis 1.新建虚拟机 --- ,Telnet(远程控制),FTP(文本传输) 表示层 数据的交换格式.数据加密解密.数据的压缩解 ...
- PE文件学习(2)导入表导出表
转自:evil.eagle https://blog.csdn.net/evileagle/article/details/12176797 导出表是用来描述模块中的导出函数的结构,如果一个模块导出了 ...
- 【思科】OSI和TCP/IP分层
OSI参考模型 20世纪70年代,ISO创建OSI参考模型,希望不同供应商的网络能够相互协同工作 OSI:开放系统互联 open system interconnection ISO:国际标准化组织 ...
- 《Microduino实战》——2.3 Microduino STM32核心系列
本节书摘来自华章出版社<Microduino实战>一 书中的第2章,第2.3节,作者:姚琪 杨立斌,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.3 Mi ...