紧急求救一个算法

kaiserfeng 2007-02-02 11:38:15
例如下列的字符串
"user1,user2","add1,add2","tel1,tel2"
要得到所有可能的组合
user1,add1,tel1;
user1,add1,tel2;
user1,add2,tel1;
user1,add2,tel2;
user2,add1,tel1;
user2,add1,tel2;
user2,add2,tel1;
user2,add2,tel2;

请教各位,在JAVA中该怎么做这个算法呢?实在太急了,想了几个小时没有想出来,请大家帮忙,多谢了。
...全文
213 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Red_angelX 2007-02-02
  • 打赏
  • 举报
回复
别忘了节贴就好...
kaiserfeng 2007-02-02
  • 打赏
  • 举报
回复
楼上的高手,非常感谢。
Red_angelX 2007-02-02
  • 打赏
  • 举报
回复

public class ExchangeArray {

/**
* @Auth Red_angelX
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[][] strJaggedArray = new String[3][];
strJaggedArray[0] = new String[] {"user1","user2"};
strJaggedArray[1] = new String[] {"add1","add2"};
strJaggedArray[2] = new String[] {"tel1","tel2"};
String[] strArray = Exchange(strJaggedArray);
for(int i=0; i< strArray.length ;i++)
{
System.out.println(strArray[i]);
}
}

/**
* 函数
* @param strJaggedArray
* @return
*/
public static String[] Exchange(String[][] strJaggedArray)
{
String[][] temp = DoExchange(strJaggedArray);
return temp[0];
}

/**
* 递归
* @param strJaggedArray
* @return
*/
private static String[][] DoExchange(String[][] strJaggedArray)
{
int len = strJaggedArray.length;
if(len >= 2)
{
int len1 = strJaggedArray[0].length;
int len2 = strJaggedArray[1].length;
int newlen = len1*len2;
String[] temp = new String[newlen];
int Index = 0;
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
temp[Index] = strJaggedArray[0][i] + ","+strJaggedArray[1][j];
Index ++;
}
}
String[][] newArray = new String[len-1][];
for(int i=2;i<len;i++)
{
newArray[i-1] = strJaggedArray[i];
}
newArray[0] = temp;
return DoExchange(newArray);
}
else
{
return strJaggedArray;
}
}

}
kaiserfeng 2007-02-02
  • 打赏
  • 举报
回复
这个算法并不是我要求的最理想的算法。
如果我的字符串变成
"user1,user2","add1,add2","tel1,tel2","unit1,unit2,unit3","class1,class2"
呢?那么不是要一直循环下去吗?而且我的字符串是可以动态增加和修改的。
bhujm 2007-02-02
  • 打赏
  • 举报
回复
程序输出:
A1, B1, C1;
A1, B1, C2;
A1, B2, C1;
A1, B2, C2;
A2, B1, C1;
A2, B1, C2;
A2, B2, C1;
A2, B2, C2;
bhujm 2007-02-02
  • 打赏
  • 举报
回复
不难啊,没有java,用vb试了下。
Dim strString1(2) As String
Dim strString2(2) As String
Dim strString3(2) As String

strString1(0) = "A1"
strString1(1) = "A2"
strString2(0) = "B1"
strString2(1) = "B2"
strString3(0) = "C1"
strString3(1) = "C2"

For i As Integer = 0 To 1
For j As Integer = 0 To 1
For k As Integer = 0 To 1
System.Console.WriteLine(strString1(i) + ", " + strString2(j) + ", " + strString3(k) + "; ")
Next
Next
Next
bhujm 2007-02-02
  • 打赏
  • 举报
回复
Private Function funTest(ByVal strStringA As String, ByVal strStringB As String) As String

Dim strReturn As String
Dim strTemp1() As String
Dim strTemp2() As String

strTemp1 = strStringA.Split(";")
strTemp2 = strStringB.Split(";")
For i As Integer = 0 To UBound(strTemp1)
For j As Integer = 0 To UBound(strTemp2)
strReturn = strReturn + strTemp1(i) + ", " + strTemp2(j) + ";"
Next
Next
strReturn = strReturn.TrimEnd(";")

Return strReturn

End Function
bhujm 2007-02-02
  • 打赏
  • 举报
回复
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click

Dim strTest As String
Dim strOutput As String
Dim strTemp As String()

strTest = "user1,user2;"
strTest &= "add1,add2;"
strTest &= "tel1,tel2;"
strTest &= "unit1,unit2,unit3;"
strTest &= "class1,class2;"

strTemp = strTest.Split(";")
For i As Integer = 0 To UBound(strTemp) - 1
strTemp(i) = strTemp(i).Replace(",", ";")
Next

For i As Integer = 1 To UBound(strTemp) - 1
strTemp(i) = funTest(strTemp(i - 1), strTemp(i))
Next

strOutput = strTemp(UBound(strTemp) - 1)
strTemp = strOutput.Split(";")
For i As Integer = 0 To UBound(strTemp)
System.Console.WriteLine((i + 1).ToString.PadLeft(2, "0") + ": " + strTemp(i))
Next

End Sub
kaiserfeng 2007-02-02
  • 打赏
  • 举报
回复
不好意思,刚才很忙,马上给你节贴。
最多只能给100了,呵呵。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧