2017-12-27 802 views
-3

計數我有兩個給出的字符串:String a = "111"String b = "132",這兩個字符串我想要實現這個計數順序:與Java

111 
112 
121 
122 
131 
132 

其他例子是,如果我有兩個給定的字符串是這樣的:字符串A = 「1111」 和字符串b = 「1223」,我希望這樣的結果:

1111 
1112 
1113 
1121 
1122 
1123 
1211 
1212 
1213 
1221 
1222 
1223 

這些可以像String a = "0100110"String b = "01101120"也更長的字符串。

我等待來自用戶將這些字符串中的條件,在字符串a每個字符應當是低於或高於字符串相同的字符位置b(字符串一個=「11」和串B =「00」 < =不相等允許)

這是一個遞歸的方法到現在爲止,但因爲它產生兩次或更多數量取決於輸入它並不能很好地工作:

public void expand(String l,String h){ 
for(int i=l.length()-1; i>=0; i--) 
{ 
    sb = new StringBuffer(l);    
    if(charToDigit(l.charAt(i)) < charToDigit(h.charAt(i))) {   
     sb.replace(i, i+1, inc(sb.charAt(i))); 
     expand(sb.toString(),h); 
     System.out.println(sb.toString()); 
    } 
} 
} 
+0

你嘗試過什麼?到目前爲止,你的代碼是什麼? [請閱讀如何編寫一個好問題的指導原則](https://stackoverflow.com/help/how-to-ask) – ubadub

+0

直到現在我還沒有任何好的結果!我正在等待一些可以很好地處理這個問題的強大功能。 –

+0

你知道如何編程Java嗎?你寫了一些東西,至少接受輸入? – ubadub

回答

0

呼叫數量較少x和較大數量y 。如果您計算y mod 10(y % 10),您會發現最低有效位的值,請撥打n。同樣,計算x的最低有效位數,將其稱爲m然後,創建一個臨時變量i,最初等於x。循環直到該數字等於y。

在循環體中,首先打印i。然後,如果i的最低有效位數(同樣由i % 10計算),則稱其爲o,小於n,增量爲i。否則,如果o == n,則通過10 - n + m增加i。當然,如果是這種情況,o > n出錯了(即來自用戶的輸入無效),因爲保證是x的所有數字小於或等於y中的相應數字。

因此,在僞代碼:

x = smaller number 
y = larger number 
n = y % 10 
m = x % 10 
i = x 

while (i <= y): 
    print i 
    o = i % 10 
    if (o < n): 
     i += 1 
    else if (o == n): 
     i += 10 - n + m 
0

這裏是我的解決方案

static String l="000"; 
static String h="232"; 
static ArrayList<String> combinations = new ArrayList<String>(); 
static int stringLength= l.length(); 

for(int i=0; i<rulelength; i++) 
{ 
    combinations.add((charToDigit(h.charAt(i)) - charToDigit(l.charAt(i))+1)+""); 
} 
int number = 1; 
for(int i=0; i<combinations.size(); i++) 
{ 
    number*=Integer.parseInt(combinations.get(i)); 
} 
int change = Integer.parseInt(combinations.get(combinations.size()-1)); 
expand(l, h, change, number); 

public static void expand(String l, String h, int change, int comb) 
{ 
    StringBuffer sb = new StringBuffer(l); 
    int pos = stringLength-1; 
    int tmpPos = pos; 
    for(int i=1; i<=comb; i++) 
    { 
     System.out.println(sb.toString()); 
     sb.replace(pos, pos+1, inc(sb.charAt(pos))); 
     if((i % change)==0) { 
      for(int j=stringLength-1; j>0; j--) 
      { 
       if(charToDigit(sb.charAt(j)) >= (Integer.parseInt(combinations.get(j))-1)) 
        tmpPos = j-1;     
       else 
        break; 
      } 
      sb.replace(tmpPos, tmpPos+1, inc(sb.charAt(tmpPos))); 
      for(int j=stringLength-1; j>tmpPos; j--) 
      { 
       sb.replace(j, j+1, l.charAt(j)+""); 
      } 
     } 
    } 
}