y*******o 发帖数: 6632 | 1 0123456789
如何产生所有如下string
012345678.9
.....
0.123456789
......
01234567.8.9
0123456.7.89
.......
0.1.2.3.4.5.6.7.8.9
java please
多谢 |
n*****5 发帖数: 984 | |
y*******o 发帖数: 6632 | 3 对所有subset
【在 n*****5 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 跟subset类似吧
|
l*********8 发帖数: 4642 | 4 输出顺序有要求吗?
【在 y*******o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 对所有subset
|
y*******o 发帖数: 6632 | 5 没有
貌似用数字mask表示doc数组idx就可以,是吧?
【在 l*********8 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 输出顺序有要求吗?
|
m*****k 发帖数: 18 | 6 9个空位可放dot,用bitset可穷举所有可能的9-bits binary strings,对应each
binary string打印dot
这方法可以么? |
U***A 发帖数: 849 | 7 只会C++
vector printDotStr(string s)
{
int len = s.length();
vector v;
for(int i=1; i<= len-1; i++)
{
for(int j=len-1; j>=i; j--)
{
int k = i;
string s1= s;
int jj = j;
while(k>0)
{
s1.insert(jj,1, '.');
jj = jj-1;
k--;
}
v.push_back(s1);
}
}
return v;
}
OUTPUT
012345678.9
01234567.89
0123456.789
012345.6789
01234.56789
0123.456789
012.3456789
01.23456789
0.123456789
01234567.8.9
0123456.7.89
012345.6.789
01234.5.6789
0123.4.56789
012.3.456789
01.2.3456789
0.1.23456789
0123456.7.8.9
012345.6.7.89
01234.5.6.789
0123.4.5.6789
012.3.4.56789
01.2.3.456789
0.1.2.3456789
012345.6.7.8.9
01234.5.6.7.89
0123.4.5.6.789
012.3.4.5.6789
01.2.3.4.56789
0.1.2.3.456789
01234.5.6.7.8.9
0123.4.5.6.7.89
012.3.4.5.6.789
01.2.3.4.5.6789
0.1.2.3.4.56789
0123.4.5.6.7.8.9
012.3.4.5.6.7.89
01.2.3.4.5.6.789
0.1.2.3.4.5.6789
012.3.4.5.6.7.8.9
01.2.3.4.5.6.7.89
0.1.2.3.4.5.6.789
01.2.3.4.5.6.7.8.9
0.1.2.3.4.5.6.7.89
0.1.2.3.4.5.6.7.8.9 |
y***n 发帖数: 1594 | |
y*******o 发帖数: 6632 | 9 这个不对,我搞定java了
class GetString{
static int seedIdx=0;
String getResult() {
String seedStr=Integer.toBinaryString(seedIdx++);
int dotCount=0;
for(int i=0;i
if(seedStr.charAt(i)=='1'){
result=result.substring(0, i+dotCount+1) + "." +
result.substring(i+dotCount+1, result.length());
++dotCount;
}
}
return result;
}
public static void main(String[] args){
while(seedIdx++<1000000){
getResult();
}
}
}
多谢大家
【在 U***A 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 只会C++ : vector printDotStr(string s) : { : int len = s.length(); : vector v; : : for(int i=1; i<= len-1; i++) : { : for(int j=len-1; j>=i; j--) : {
|
m*****k 发帖数: 731 | 10 这个编译都不回过吧,result哪儿来的?
why 1000000?
这题本质上就是间隔位的powerset 嘛。
【在 y*******o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个不对,我搞定java了 : class GetString{ : static int seedIdx=0; : String getResult() { : String seedStr=Integer.toBinaryString(seedIdx++); : int dotCount=0; : for(int i=0;i: if(seedStr.charAt(i)=='1'){ : result=result.substring(0, i+dotCount+1) + "." + : result.substring(i+dotCount+1, result.length());
|
m*****k 发帖数: 731 | 11 public static void addDot(String input){
char[] dots = new char[input.length() - 1];
getDottedString(dots, 0, input);
}
private static void getDottedString(char[] dots, int i, String input) {
if(i==dots.length){
//merge dots with input and output
StringBuilder result = new StringBuilder();
for(int j=0; j
result.append(input.charAt(j));
if(j
result.append(dots[j]);
}
}
System.out.println(result.toString());
}
else{
dots[i]='\0';
getDottedString(dots, i+1, input);
dots[i]='.';
getDottedString(dots, i+1, input);
}
}
/******input = "01234"***/
0 |