我试图找到数组中的字符串组合{"A","B","C"}
而不重复,并且元素的顺序应保留在子集中。 所需的订单是[["B","C"], ["A","C"], ["A","B"], ["A","B","C"], ["A"], ["C"], ["B"]]
。我曾尝试使用在此question中找到的答案编写逻辑,并且发现元素的顺序未保留。在Java中查找数组中所有字符串的组合
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? – GhostCat
是的,它应该是a,b,而不是b,a。子集的顺序无关紧要,但子集内的元素顺序是。 – User