本题为剑指offer面试题12
package offer.day421;
public class Demo1 {
public static void main(String[] args) {
// solve_1(3);
// solve_2(3);
solve_3(3);
}
/*
* 跳进面试官的陷阱 如果n很大,用int或者long类型都会溢出
*/
public static void solve_1(int n) {
if (n <= 0)
return;
int maxNum = 1;
for (int i = 0; i < n; i++) {
maxNum *= 10;
}
for (int i = 1; i < maxNum; i++) {
System.out.println(i);
}
}
public static void solve_2(int n) {
if (n <= 0)
return;
StringBuffer s = new StringBuffer(n);
// 生成全为0的n位字符串
for (int i = 0; i < n; i++) {
s.append('0');
}
// 第0位是最高位
for (int i = 0; i < 10; i++) {
s.setCharAt(0, (char) (i + '0'));
solve_2(s, n, 0);
}
}
private static void solve_2(StringBuffer s, int n, int index) {
if (index == n - 1) {
printNumber(s);
return;
}
for (int i = 0; i < 10; i++) {
s.setCharAt(index + 1, (char) ('0' + i));
solve_2(s, n, index + 1);
}
}
// 打印s,去除开头多余的0
private static void printNumber(StringBuffer s) {
boolean isBeginning0 = true;
for (int i = 0; i < s.length(); i++) {
// 当找到第一个非0字符以后,把isBeginning0设置为false,后面的字符全部打印
if (isBeginning0 && s.charAt(i) != '0') {
isBeginning0 = false;
}
if (!isBeginning0)
System.out.print(s.charAt(i));
}
System.out.println();
}
}