void printOut(String s) {
// System.out.print(s);
}
void printOut(char[] c, int len) {
// System.out.print(s);
}
static char ccc[] = {'0', '1', '2', '3'};
private void printOne(int steps[], int len) {
if (len > 0) {
printOut(ccc[steps[0]]);
}
for (int i = 1; i < len; i++) {
printOut(',');
printOut(ccc[steps[i]]);
}
printOut("\r\n");
}
public void yaoyuan(int n) {
if (n <= 0) {
return;
}
// 存放所有的走法
int steps[] = new int[n];
// 初始化为每步走1个台阶
for (int i = 0; i < n; i++) {
steps[i] = 1;
}
// 输出第一种走法
printOne(steps, n);
int pre = 0;
int last = n - 1;
while (last > 0) {
pre = last - 1;
switch (steps[last]) {
case 1: {
steps[pre]++;
steps[last]--;
last--;
break;
}
case 2: {
steps[pre]++;
steps[last] = 1;
break;
}
case 3: {
steps[pre]++;
steps[last] = 1;
last++;
steps[last] = 1;
break;
}
}
// 是否需要进位
while (pre > 0 && steps[pre] == 4) {
steps[pre] = 1;
pre--;
steps[pre]++;
last++;
steps[last] = 1;
last++;
steps[last] = 1;
}
// 是否已经结束
if (pre == 0 && steps[0] == 4) {
break;
}
// 输出一种走法
printOne(steps, last + 1);
}
}
|