2017-12-27 801 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)+""); 
      } 
     } 
    } 
}