2017-12-27 30 views
-3

でカウント"1111" と文字列B = "1223"、私はこの結果を期待する:私は2つの与えられた文字列を持っているJavaの

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

これらはString a = "0100110"String b = "01101120"のような、より長い文字列をすることができます。

私は文字列a内のすべての文字が文字列b(列A =「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

これは今まで再帰的な方法ですが、それは、入力に応じて、2回以上の数を生成するので、それは非常にうまく機能しません)許可。 y mod 10(y % 10)を計算すると、最下位桁の値を見つけることができます。これはnとなります。同様に、xの最下位桁を計算し、mと呼びます。iは、最初にxに等しい一時変数を作成します。その数がyに等しくなるまでループしてください。

ループの本体では、まずiを印刷します。次に、i(やはりi % 10で計算される)の最下位桁がoとなり、nより小さい場合は、iを1つ増やしてください。それ以外の場合、o == nの場合は、i10 - n + mに増やしてください。当然、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)+""); 
      } 
     } 
    } 
} 
関連する問題