2017-01-22 4 views
-2

교과서에 따르면 작가는 java에서 순열을 실현하는 특별한 방법을 사용하라고했습니다. 더 정확하게 말하면, 두 가지 기능이 존재합니다자바 순열 (재귀)에 대한 특별한 해결책은 무엇입니까?

단순히 다음 기능으로 저자의 관점에서 displayPermutation("", String s); 를 호출한다

public void static displayPermutation(String s)가 ----, 우리는 후 인 "S"에서 하나 개의 문자를 이동해야 쉼표를 재귀를 사용하여 첫 단계에있는 문자열로 옮깁니다.

그러나 나는 모든 노력을 실현 함에도 불구하고 코드가 작동하지 않는다고 생각합니다. 내 코드는 다음과 같습니다.

public static void displayPermuation(String s){ 
    displayPermuation("", s); 
} 
public static void displayPermuation(String s1, String s2){ 
    if(s2.length() == 0){ 
     System.out.println(s1); 
     return; 
    }else{ 
     for(int i = 0; i < s2.length(); i++){ 
      s1 = String.format(s1 + "%s", s2.charAt(i)); 
      s2 = String.format("%s%s", s2.substring(0, i), s2.substring(i + 1, s2.length())); 
      displayPermuation(s1, s2); 
     } 
    } 
} 
+3

"작동하지 않음"이란 무엇을 의미합니까? 당신은 무엇을 기대하고 실제 결과는 무엇입니까? – Guy

+0

for 루프의 첫 번째 반복 이후에,'s1'과's2' 문자열은 더 이상 당신이 가정하는 문자열이 아닙니다. – Henry

답변

0

이 문제에 대한 해결책은 아래에서 찾으십시오. 두 개의 매개 변수가있는 displayPermuation 함수는 다음과 같이 작성됩니다. 이것이 작동하지 않는 이유는 for 루프에서 s1 & s2를 변경하여 for 루프 반복기에 영향을 미치기 때문입니다.

한다고 가정

S2 = 'ABC'루프 그래서

실행 3 회

는 우리는 (S2) = 기원전합니다. 당신은 그냥 루프는 아래의 코드와 같이 잘 작동됩니다에 S2의 값을 변경하지 않으면

그래서 길이는 2

된다.

public static void displayPermuation(String s1, String s2) { 
    if (s2.length() == 0) { 
     System.out.println(s1); 
     return; 
    } 
    for (int i = 0; i < s2.length(); i++) { 
     displayPermuation(s1+s2.charAt(i), s2.substring(0,i)+s2.substring(i+1, s2.length())); 
    } 
} 

희망이 있습니다.