package SwordOffer;
/**
* @Description: 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
用返回一个整数列表来代替打印
n 为正整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
public class lab17easy {
public static void main(String[] args){
lab17easy in = new lab17easy();
System.out.println( in.printNumbers(10));
}
// public static int[] printNumbers(int n) {
// int temp = new Double(Math.pow(10,n) -1).intValue();
// int []out = new int[temp];
// int i=0;
// while(i<temp){
// out[i]=i+1;
// i++;
// }
// return out;
// }
StringBuilder res;
int nine = 0, count = 0, start, n;
char[] num, loop = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
public String printNumbers(int n) {
this.n = n;
res = new StringBuilder();
num = new char[n];
start = n - 1;
dfs(0);
res.deleteCharAt(res.length() - 1);
return res.toString();
}
void dfs(int x) {
if(x == n) {
String s = String.valueOf(num).substring(start);
if(!s.equals("0")) res.append(s + ",");
if(n - start == nine) start--;
return;
}
for(char i : loop) {
if(i == '9') nine++;
num[x] = i;
dfs(x + 1);
}
nine--;
}
//递归
// public void printNumbers(int n) {
// if (n <= 0) {
// return;
// }
// char[] number = new char[n];
// for (int i = 0; i < 10; i++) {
// number[0] = (char) (i + '0');
// print1ToMaxOfNDigitsRecursively(number, n, 0);
// }
// }
//
// private void print1ToMaxOfNDigitsRecursively(char[] number, int length, int index) {
// if (index == length - 1) {
// printNumber(number);
// return;
// }
// for (int i = 0; i < 10; i++) {
// number[index + 1] = (char) (i + '0');
// print1ToMaxOfNDigitsRecursively(number, length, index + 1);
// }
// }
//
// private void printNumber(char[] number) {
// boolean isBegin0 = true;
// int length = number.length;
// for (int i = 0; i < length; i++) {
// if (isBegin0 && number[i] != '0') {
// isBegin0 = false;
// }
// if (!isBegin0) {
// System.out.print(number[i]);
// }
// }
// if (!isBegin0) {
// System.out.println();
// }
// }
//遍历
// public void printNumbers(int n) {
// if (n <= 0) {
// return;
// }
// char[] number = new char[n];
// for (int i = 0; i < n; i++) {
// number[i] = '0';
// }
// while (!increment(number)) {
// printNumber(number);
// }
// }
//
// private boolean increment(char[] number) {
// int takeOver = 0;
// int length = number.length;
// for (int i = length - 1; i >= 0; i--) {
// int sum = number[i] - '0' + takeOver;
// if (i == length - 1) {
// sum++;
// }
// if (sum >= 10) {
// if (i == 0) {
// return true;
// } else {
// sum -= 10;
// takeOver = 1;
// number[i] = (char) ('0' + sum);
// }
// } else {
// number[i] = (char) ('0' + sum);
// break;
// }
// }
// return false;
// }
//
// private void printNumber(char[] number) {
// boolean isBegin0 = true;
// int length = number.length;
// for (int i = 0; i < length; i++) {
// if (isBegin0 && number[i] != '0') {
// isBegin0 = false;
// }
// if (!isBegin0) {
// System.out.print(number[i]);
// }
// }
// if (!isBegin0) {
// System.out.println();
// }
// }
}