【发布时间】:2017-03-22 13:46:32
【问题描述】:
我正在尝试在不重复的数组{"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:子集的顺序无关紧要,但子集中元素的顺序是。
【问题讨论】:
-
为什么 b,c 应该在 a,c 之前?还是a,b?我不知道“保持初始顺序”。还是只是:应该是 a,c 而不是 c,a?
-
是的,它应该是 a,b 而不是 b,a。子集的顺序无关紧要,但子集中元素的顺序是。
标签: java arrays combinations