示例一:
输入: "1,2,3,4,56"
输出: "1,2,3,4,5", "1,2,3,4,6"
示例二:
输入: "12,3,5,6,7"
输出: "1,3,5,6,7", "2,3,5,6,7"
输入的格式限定是: "S1,S2,S3,S4,S5", 包括四个逗点,五个最大不超过10个的数字字符串.
要考试,求算法...
示例一:
输入: "1,2,3,4,56"
输出: "1,2,3,4,5", "1,2,3,4,6"
示例二:
输入: "12,3,5,6,7"
输出: "1,3,5,6,7", "2,3,5,6,7"
输入的格式限定是: "S1,S2,S3,S4,S5", 包括四个逗点,五个最大不超过10个的数字字符串.
要考试,求算法...
两个算法如果针对性地实现也不难,不过最后那个格式限定不太理解,既然是不超过10的数字字符串,那么56和12似乎不满足要求?
我马上去尝试写一下算法
不是不超过10,是长度不超过10,即,每一个 逗号节点之间,最长是 0123456789
即最大值:
"0123456789,0123456789,0123456789,0123456789,0123456789"
写得比较乱,也没扩展性,只是针对你的问题写的一套代码,如果需要有扩展的话,你再研究下,应该比较简单
这段代码可以执行效果:
请输入:
0123,45,67,8,9
0,4,6,8,9
0,4,7,8,9
0,5,6,8,9
0,5,7,8,9
1,4,6,8,9
1,4,7,8,9
1,5,6,8,9
1,5,7,8,9
2,4,6,8,9
2,4,7,8,9
2,5,6,8,9
2,5,7,8,9
3,4,6,8,9
3,4,7,8,9
3,5,6,8,9
3,5,7,8,9
但是有个问题,没有按照数据大小排列,我不知道是否有这种要求,比如不能出现:4,3,5,6,7这种情况,如果有的话,再加入判断就可以了。
不过我觉得这个算法应该可以写成递归,无奈自己才疏学浅啊
不会算法,见谅,去除重复往map里扔
// TODO Auto-generated method stub
Test1 t = new Test1();
StringBuffer[] s = t.test("1,2,3,4,56");
for(StringBuffer sf :s){
System.out.println(sf.toString().substring(0,sf.toString().lastIndexOf(",")));
}
}
public StringBuffer[] test(String str){
String[] strArray = str.split(",");
int len = 1;
List<char[]> list = new ArrayList<char[]>();
for(int j = 0; j<strArray.length; j++){
String s1 = strArray[j];
char[] chs = s1.toCharArray();
len = chs.length * len;
list.add(chs);
}
StringBuffer[] sbs = new StringBuffer[len];
for(int i=0; i<len; i++){
sbs[i] = new StringBuffer();
}
for(char[] cs : list){
int csLen = cs.length;
int t = len/csLen;
for(int n=0; n<t; n++){
for(int m=0; m<csLen; m++){
sbs[n*csLen+m].append(cs[m]+",");
}
}
}
// for(StringBuffer sf :sbs){
// System.out.println(sf.toString().substring(0,sf.toString().lastIndexOf(",")));
// }
return sbs;
}