栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

返回列表列表的叉积

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

返回列表列表的叉积

就像将数字递增一样,例如以3为底的数字:

000001002010011...222

现在,将每个数字视为每个嵌套列表的索引。您将拥有与嵌套列表一样多的数字,即外部列表的大小。

每个数字的“基数”可能不同,并且是相应嵌套列表的大小。如果嵌套列表很大,则“数字”可以是非常大的数字。

因此,您首先创建“数字”或索引值的列表,然后将它们初始化为

0
。然后,您可以在这些索引处打印元素的值。然后,您增加最后一个索引值,根据需要进行滚动,就像正常数字一样,在第一个索引值滚动时停止。

这是使用数组数组(即)的Java实现

String[][]
。您可以根据需要轻松更改为
List<List<String>>
List<String[]>

@SafeVarargspublic static void printCombos(String[] ... lists) {    if (lists.length == 0)        throw new IllegalArgumentException("No lists given");    for (String[] list : lists)        if (list.length == 0) throw new IllegalArgumentException("List is empty");    int[] idx = new int[lists.length];    for (;;) {        // Print combo        for (int i = 0; i < lists.length; i++) { if (i != 0)     System.out.print(' '); System.out.print(lists[i][idx[i]]);        }        System.out.println();        // Advance to next combination        for (int i = lists.length - 1; ++idx[i] == lists[i].length; ) { idx[i] = 0; if (--i < 0)     return; // We're done        }    }}public static void main(String[] args) {    String[][] data = { { "x", "z" }, { "a", "b", "c" }, { "o", "p" } };    printCombos(data);}

输出值

x a ox a px b ox b px c ox c pz a oz a pz b oz b pz c oz c p

如果您使用列表而不是数组,那么代码将使用

get(int)
,这可能并不总是对性能有好处,例如for
linkedList

如果是这种情况,请用替换

int[]idx
,使用
Iterator[]
对应列表的迭代器初始化每个数组条目。然后,通过
Iterator
从相关列表中检索新的数字,将“数字”重置为0 。

在这种情况下,它们甚至不必是列表,而可以是任何种类的集合,或更具体地说是

Iterable
对象。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号