일부 숫자의 가능한 모든 순열을 찾으려면이 코드를 작성했습니다. 하지만 한 번 두 자리를 두 번 사용하고 싶지 않습니다.
123,132,213은 괜찮 으면서 122,121 등과 같은 번호를 만듭니다.
내가 뭘 잘못하고 있니?모든 순열 코드 찾기 문제 (Java)
import java.util.HashSet;
public class main {
public static void main(String[] args) {
HashSet<Integer> l = new HashSet<Integer>();
for(int i=0;i<=3;i++){
l.add(i);
}
perm(l,3,new StringBuffer());
}
static void perm(HashSet<Integer> in, int depth,StringBuffer out){
if(depth==0){
System.out.println(out);
return;
}
int len = in.size();
HashSet<Integer> tmp = in;
for(int i=0;i<len;i++){
out.append(in.toArray()[i]);
tmp.remove(i);
perm(tmp,depth-1,out);
out.deleteCharAt(out.length()-1);
tmp.add(i);
}
}
}
좋아, 나는 오토바이에 대해 많이 모른다. 코드 자체가 최적이 아니라고 생각합니다. HashSet 이외의 다른 다다미 구조를 사용할 수 있습니까? – gethan
@gethan Autoboxing은 Java가 기본 유형 (예 : int)을 등호 클래스 (예 : Integer)로 변환하거나 역순으로 처리하는 곳입니다. 따라서 처음에 HashSet에 int를 추가하면 객체로 변환됩니다. 그 객체를 'AnInt'라고 부를 수 있습니다. 그런 다음 두 번째 int를 제거하면 'AnotherInt'객체에 boxed되고 두 객체는 동일하지 않습니다. 따라서 HashSet은 제거 할 첫 번째 것을 찾지 못합니다. – Wer2