Java 从组合中需要第五个字符串

Java 从组合中需要第五个字符串,java,combinations,permutation,Java,Combinations,Permutation,假设有一个字符串s=abcd 我想要第五个字符串,由a,b,c,d组成,即adbc。 但除此之外,我还得到了我不需要的所有答案 那么,在第五次执行后,如何停止此方法 import java.util.Arrays; import java.util.Scanner; class Test{ long times; int n=1; public static void main(String[] args) { Test tm=new Test();

假设有一个
字符串s=abcd

我想要第五个字符串,由
a
b
c
d
组成,即
adbc
。 但除此之外,我还得到了我不需要的所有答案

那么,在第五次执行后,如何停止此方法

import java.util.Arrays;
import java.util.Scanner;

class Test{
   long times;
   int n=1;

   public static void main(String[] args) {
        Test tm=new Test();
        Scanner in=new Scanner(System.in);
        int t=Integer.parseInt(in.nextLine());

        while(t!=0){
            String s=in.nextLine();
            char ch[]=s.toCharArray();          
            Arrays.sort(ch);
            String sort=String.valueOf(ch);            
            String ans;
            long n=Long.parseLong(in.nextLine());
            tm.times=n;
            tm.permu("",sort);
            t--;           
        }
    }

    private void permu(String prefix,String str) {
        int len=str.length();          

        if(len==0){
            if(n==times){
                System.out.println(prefix);
            }
            else{
                n++;
            }
        }
        else{
            for(int i=0;i<len;i++){
                permu(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, len));
            }
        }      
    }
}
导入java.util.array;
导入java.util.Scanner;
课堂测试{
长时间;
int n=1;
公共静态void main(字符串[]args){
测试tm=新测试();
扫描仪输入=新扫描仪(系统输入);
int t=Integer.parseInt(in.nextLine());
while(t!=0){
字符串s=in.nextLine();
char ch[]=s.toCharArray();
数组。排序(ch);
字符串排序=String.valueOf(ch);
字符串ans;
long n=long.parseLong(in.nextLine());
tm.次=n;
tm.permu(“,排序);
t--;
}
}
私有void permu(字符串前缀,字符串str){
int len=str.length();
如果(len==0){
如果(n==次){
System.out.println(前缀);
}
否则{
n++;
}
}
否则{

对于(int i=0;i在运行检查并在递归中打印结果后,不会更改
n
。这就是为什么在
adbc
之后打印所有内容

如果在检查时使用此代码:

if (n == times) {
    System.out.println(prefix);
    n = -1;
} else {
    if (n > -1)
        n++;
}
然后,只有一次
n==times
为真,此时
前缀为
adbc

解决方案的示例测试:


如果你想停止一个没有返回值的方法(在方法签名的返回类型中有
void
),那么调用
return;
将退出该方法…但是这里不需要它。

@Itamar Green:谢谢..还有没有内置的库函数来停止一个方法..像上面的一个类似System.exit()虽然它会停止整个执行..类似的..还有第二个问题的链接吗?@Fawkes(首先,好名字)在一个问题中问两个不同的问题被认为是离题的,同时也要求非现场资源……所以我没有回答这一部分。但是我不明白为什么你需要停止这个方法,因为它是有效的。@Itamar Green(谢谢):我不知道“两个不同的问题”问题。这个问题来自于编码竞赛,这就是为什么我必须在第五次执行时停止。还有一个问题,我被困了6个月。组合电子学问题。这就是为什么我问有关参考资料的问题。@Fawkes,现在你知道了。非常高兴帮助:P