java - 组合 n 个列表列表保存顺序(Java)

标签 java algorithm

我有一个字符串列表列表[每个元素都在括号中],需要获取字符串列表,每个字符串代表每个列表中一个元素的元素组合。需要得到所有的组合

[+9, +4, +a]
[+i*o -k*z +(m+n+f+5)][+i*o +(m+n+f+5) -k*z][+(m+n+f+5) +i*o -k*z]
[+h*i/o +6*l/8]
[+b/c/r +(a*b*x*y+1)][+(a*b*x*y+1)+b/c/r]

需要得到

[+9, +4, +a][+i*o -k*z +(m+n+f+5)][+h*i/o +6*l/8][+b/c/r +(a*b*x*y+1)]
[+9, +4, +a][+i*o -k*z +(m+n+f+5)][+h*i/o +6*l/8][+(a*b*x*y+1)+b/c/r]
[+9, +4, +a][+i*o +(m+n+f+5) -k*z][+h*i/o +6*l/8][+b/c/r +(a*b*x*y+1)]
[+9, +4, +a][+i*o +(m+n+f+5) -k*z][+h*i/o +6*l/8][+(a*b*x*y+1)+b/c/r]
[+9, +4, +a][+(m+n+f+5) +i*o -k*z][+h*i/o +6*l/8][+b/c/r +(a*b*x*y+1)]
[+9, +4, +a][+(m+n+f+5) +i*o -k*z][+h*i/o +6*l/8][+(a*b*x*y+1)+b/c/r]

感谢任何帮助 谢谢

最佳答案

与 Guava Sets.cartesianProduct :

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;

import java.util.List;
import java.util.Set;


public class Foo {
    public static void main(String[] args)
    {
        final Set<String> s1 = ImmutableSet.of("[+9, +4, +a]");
        final Set<String> s2 = ImmutableSet.of("[+i*o -k*z +(m+n+f+5)]","[+i*o +(m+n+f+5) -k*z]","[+(m+n+f+5) +i*o -k*z]");
        final Set<String> s3 = ImmutableSet.of("[+h*i/o +6*l/8]");
        final Set<String> s4 = ImmutableSet.of("[+b/c/r +(a*b*x*y+1)]","[+(a*b*x*y+1)+b/c/r]");
        @SuppressWarnings("unchecked")
        final Set<List<String>> cartesianProducts = Sets.cartesianProduct(s1, s2, s3, s4);
        for (final List<String> cartesianProduct : cartesianProducts) {
            System.out.println(Joiner.on("").join(cartesianProduct));
        }
    }        
}

输出:

[+9, +4, +a][+i*o -k*z +(m+n+f+5)][+h*i/o +6*l/8][+b/c/r +(a*b*x*y+1)]
[+9, +4, +a][+i*o +(m+n+f+5) -k*z][+h*i/o +6*l/8][+b/c/r +(a*b*x*y+1)]
[+9, +4, +a][+(m+n+f+5) +i*o -k*z][+h*i/o +6*l/8][+b/c/r +(a*b*x*y+1)]
[+9, +4, +a][+i*o -k*z +(m+n+f+5)][+h*i/o +6*l/8][+(a*b*x*y+1)+b/c/r]
[+9, +4, +a][+i*o +(m+n+f+5) -k*z][+h*i/o +6*l/8][+(a*b*x*y+1)+b/c/r]
[+9, +4, +a][+(m+n+f+5) +i*o -k*z][+h*i/o +6*l/8][+(a*b*x*y+1)+b/c/r]

关于java - 组合 n 个列表列表保存顺序(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20784777/

相关文章:

查找 NAPTR DNS 查询负载分配的算法

algorithm - 在数组 [1, 2 , 5, 9] 中获取总和等于 20 的所有可能组合?

java - 使用日期和&&时的性能问题

java - 在 java applet 中设置 TextField 的位置

java - JNLP:在签名代码中加载未签名代码

java - 转换为List后如何迭代方法中的元素?

algorithm - 看似简单?给定一个整数,找到恰好整除它的最近整数集合?

java - 两部分,删除Java中节点中的最后一个元素并替换两个元素

algorithm - Paxos是如何处理丢包和新节点加入的?

java - 为什么此代码适用于此 TopCoder 概率?