4

I/p:5278
所需的 o/p:527,278,785,852(我手动执行此操作)。但如果数量很大,那么它就是一个问题。

注意:输出应该是没有重复组合的方式。(即在上述组合中,有一个数字 527 就足够了,我不希望输出中可能有 257 或 725 等组合,

我怎样才能做到这一点?有什么线索吗?

编辑:一个重要的事情是输入数字是唯一的。为了在任何时候更清楚输入不能有像 1123 0r 3455 这样的值。

4

5 回答 5

3

这里有一些例子:

public class Combination {

    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder("5278");
        String str;
        int lastIndex;

        if(builder.length() % 2 == 0) {
            lastIndex = builder.length() / 2;
        } else {
            lastIndex = builder.length() / 2 + 1;
        }
        str = builder.toString() + builder.toString().substring(0, lastIndex);

        for (int i = 0; i < builder.length(); i++) {
            System.out.println(str.substring(i, i + 3));
        }
    }
}

更新比上面更简单的方式(基于与veredesmarald的对话)

public class Combination {

    public static void main(String[] args) {
        char[] digits = Integer.toString(123).toCharArray();
        for (int i = 0; i < digits.length; i++) {
            System.out.println("" + digits[i] + digits[(i + 1) % digits.length] + digits[(i + 2) % digits.length]);
        }
    }
}
于 2012-05-29T06:33:26.967 回答
2
public static void printCombinations(int input)
{
    char[] digits = Integer.toString(input).toCharArray();

    for (int i = 0; i < digits.length - 2; i++) {
        for (int j = i + 1; j < digits.length - 1; j++) {
            for (int k = j + 1; k < digits.length; k++) {
                System.out.println("" + digits[i] + digits[j] + digits[k]);                      
            }
        }
    }
}

这将从您的输入整数中获得 3 位数字的所有唯一组合。请注意,这仅在您所说的数字唯一时才有效。如果您需要构建其他长度的组合,您可以编写一个递归函数。

样本输出:

printCombinations(12345);

123
124
125
134
135
145
234
235
245
345
于 2012-05-29T06:57:49.880 回答
0
    Integer input = 5278;
    List<Character> digits = new ArrayList<Character>();
    for(char c : String.valueOf(input).toCharArray()) {
        digits.add(Character.valueOf(c));
    }
    int a  = 0;
    for(int i=0; i<digits.size(); i++){
        for(int j=0; j<digits.size(); j++){
            for(int k=0; k<digits.size(); k++){
                if(!digits.get(i).equals(digits.get(j)) && !digits.get(j).equals(digits.get(k)) && !digits.get(i).equals(digits.get(k))){
                    System.out.println(++a +": " + digits.get(i) + digits.get(j) + digits.get(k));                      
                }
            }
        }
    }
于 2012-05-29T06:32:08.953 回答
0
private static void test() {
    int a[] = { 1, 2, 3, 4, 5, 6 };
    char[] digits = Integer.toString(123456).toCharArray();
    Set<String> res = new HashSet<>();
    int i = 0;
    int m = digits.length - 1;
    while (i <= digits.length - 1 && m >= 0) {

        for (int j = 0; j <= digits.length - 1; j++) {
            for (int k = 0; k <= digits.length - 1; k++) {

                if (digits[j] != digits[k] && digits[i] != digits[j] && digits[m] != digits[j]) {
                    res.add(digits[i] + "" + digits[j] + "" + digits[k]);
                    res.add(digits[i] + "" + digits[k] + "" + digits[j]);
                    res.add(digits[m] + "" + digits[k] + "" + digits[j]);
                    res.add(digits[m] + "" + digits[j] + "" + digits[k]);

                }
            }
        }

        i++;
        m--;
    }
    res.stream().forEach(e -> System.out.println(e));

}
于 2021-04-02T09:51:34.090 回答
-2

将输入的数字放入列表中,创建将返回此列表索引的随机生成器,形成您的输出:

Integer input = 5278;
char[] digits = String.valueOf(input).toCharArray();

int numberOfTrinities = 4;
String result = "";
Random generator = new Random();
List<String> trinities = new ArrayList<String>();
while(trinities.size() < numberOfTrinities ) {
    String nextTrinity = "";
    for(int i = 0; i < 3; i++) {
        nextTrinity  += digits(generator.nextInt(digits.size()));
    }
    if(isUniqueDigitsTrinity(trinities, nextTrinity)) {
        trinities.add(nextTrinity);
    }        
}
String result = "";
for(String trinity : trinities) {
    result += trinity;
}
System.out.printl("Input: " + input + ", Result: " + result);

我们需要这个来检查三位一体的唯一数字:

private boolean isUniqueDigitsTrinity(List<String> trinities, String candidateTrinity) {
    for(String existingTrinity : trinities) {
        String checker = existingTrinity;
        for(char candidateChar : candidateTrinity.toCharArray()) {
            checker.replace(candidateChar, '');
        }
        if(checker.length() <= 0) {
            return false;
        }
    }
    return true;
}
于 2012-05-29T06:12:34.783 回答