2017-05-28 27 views
4

需要5串假設有一個string s=abcd從組合

我想第五串包括abcd,這是adbc。 但我也得到了所有我不需要的答案。

那麼如何在第5次執行後停止此方法?

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)); 
      } 
     }  
    } 
} 

其次是有任何網站,我可以讀到排列,組合以及計算和查找的排列組合和概率的概率......對於代碼的東西不是數學thing..ie我知道如何解決數學但我不能編碼它..無法爲它寫邏輯。

回答

3

運行檢查並在遞歸中打印結果後,您不會更改n。這就是爲什麼您在adbc之後打印所有內容的原因。

如果在檢查時,使用此代碼:

if (n == times) { 
    System.out.println(prefix); 
    n = -1; 
} else { 
    if (n > -1) 
     n++; 
} 

那麼你只能得到n == times是真實的一次,那就是當prefixadbc

爲解決試驗例:

output

如果要停止沒有返回值(在方法簽名的返回類型void)的方法,然後調用return;將退出方法......但這裏不需要。

+0

@ Itamar Green:謝謝.. 是否有任何內建的庫函數來停止一個方法..就像上面的一個像System.exit()雖然它會停止整個執行..就是這樣... .. 和第二個問題的任何鏈接??? – Fawkes

+0

@Fawkes(首先,很好的名字)在一個問題中,不論問兩個不同的問題,還是要求非現場資源,都被認爲是脫離主題......所以我沒有回答這個問題。不過,我不明白爲什麼你需要停止該方法,因爲它的工作。 – ItamarG3

+0

@ Itamar Green(謝謝):我不知道「兩個截然不同的問題」。 這個問題來自編碼競爭對手,這就是爲什麼我必須停止在第5 execution.there有另一個問題,我堅持了6個月combinatroics problem.thats爲什麼我問的參考資料。 – Fawkes