题目要求
一个字符串有 n
位,每一位是 0
或者 1
,要求按要求输出所有可能的字符串且要求升序排列。
示例
一个长度为 3 的字符串,按要求应该输出
000
001
010
011
100
101
110
111
其实思路就是将 0 到 2len - 1 的数字依次用长度为len的二进制字符串表示。
注意:如果用 Integer.toBinaryString()
的方法的话,会导致字符串长度不够,比如 n 为 2 的话, 0 转为 二进制 就变成 0,而不是要求的 00)
代码如下
public class Hello5 {
public static void main(String[] args) {
int len = 5; // 可以自己指定长度
String[] res = generateStr(len);
for (String s : res) {
System.out.println(s);
}
}
// 生成指定长度len的所有字符串
public static String[] generateStr(int len) {
int count = (int)Math.pow(2, len);
String[] res = new String[count];
for (int i = 0; i < count; i++) {
// number就表示待转为2进制字符串的数字,j表示字符串索引
int number = i, j = 0;
// StringBuilder用来拼接字符串
StringBuilder sb = new StringBuilder();
// 加上一个j < len是为了number提早到达0的时候继续生成0以满足字符串长度要求
while (j < len || number != 0) {
sb.append(number % 2);
number /= 2;
j++;
}
// 这一步别忘了先reverse(),因为上面sb.append() 是尾插法
res[i] = sb.reverse().toString();
}
return res;
}
}