gpt4 book ai didi

java - 在Java中查找数组中所有字符串的组合

转载 作者:行者123 更新时间:2023-11-30 07:55:44 25 4
gpt4 key购买 nike

我试图在数组 {"A","B","C"} 中查找不重复的字符串组合,并且元素的顺序应保留在子集中。所需的顺序为 [["B","C"], ["A","C"], ["A","B"], ["A","B","C"] ,[“A”],[“C”],[“B”]]。我尝试使用此 question 中找到的答案编写逻辑。 ,发现元素的顺序没有保留。

public static Set <JSONArray> getCombinations( int k , JSONArray properties )
{
Set <JSONArray> combinations = new LinkedHashSet <JSONArray>();
try
{
if ( k == 0 )
{
combinations.add( new JSONArray() );
return combinations;
}
for ( int i = 0 ; i < properties.length() ; i++ )
{
String element = properties.getString( i );
JSONArray sublist = getSublist( properties , i + 1 );
combinations.add( sublist );
Set <JSONArray> combinations2 = getCombinations( k - 1 , sublist );
for ( JSONArray previous : combinations2 )
{

previous.put( element );
combinations.add( previous );
}
}
}
catch ( Exception e )
{
System.out.println( "Exception :: " + e );
}
return combinations;
}

public static JSONArray getSublist( JSONArray list , int i ) throws JSONException
{
JSONArray sublist = new JSONArray();
for ( int j = i ; j < list.length() ; j++ )
{
sublist.put( list.getString( j ) );
}
return reverseArray( sublist );
}

输出为::[["B","C"], ["C","A"], ["B","A"], ["C","B", “A”],[“A”],[“C”],[“B”]]。但我需要保留顺序,例如 [“C”,“A”] 应该是 [“A”,“C”]。任何想法都会有帮助。

PS:子集的顺序并不重要,重要的是子集中元素的顺序。

最佳答案

组合可以用数字表示 - 以二进制形式,每个位置的数字表明该元素是否存在。例如。 5=101 -> {A、C}

因此,让我们迭代<0..2^n-1>范围内的combinations=数字并获取与该数字相对应的元素,这意味着索引存在于组合的二进制表示中的那些元素。

 public class Combins {

static String[] a = new String[] { "A", "B", "C" };

public static void main(final String[] args) {

final int maxbit = 1 << a.length;

//for each combination given by a (binary) number 'p'...
for (int p = 0; p < maxbit; p++) {
final List<String> res = new ArrayList<String>();

//evaluate if array 'a' element at index 'i' is present in combination (and include it if so)
for (int i = 0; i < a.length; i++) {
if ((1 << i & p) > 0) {
res.add(a[i]);
}
}
System.out.println(Arrays.toString(res.toArray()));
}
}
}

输出是:

[]
[A]
[B]
[A, B]
[C]
[A, C]
[B, C]
[A, B, C]

关于java - 在Java中查找数组中所有字符串的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com