簡體   English   中英

用 Java 計數

[英]Counting with Java

我有兩個給定的字符串: String a = "111"String b = "132" ,對於這兩個 String 我想實現這個計數順序:

111
112
121
122
131
132

另一個例子是,如果我有兩個這樣的給定字符串:String a = "1111" 和 String b = "1223",我希望得到這個結果:

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

調用較小的數字x和較大的數字y 如果您計算y mod 10 ( y % 10 ),您將找到最低有效數字的值,稱為n 同樣,計算x的最低有效位,稱為m然后,創建一個臨時變量i ,它最初等於x 循環直到該數字等於 y。

在循環體中,首先,打印i 然后,如果i的最低有效位(同樣,由i % 10計算),稱其為o ,小於n ,則將i加一。 否則,如果o == n ,則將i增加10 - 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

這是我的解決方案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM