因为牛客网上无该题,以及LeetCode网该题的更改(让该题无意义),所以在此记录
题目:输入数字n,按照顺序打印出从1到最大的n位十进制数。比如输入3,则打印从1到999的数字
注意,当该题的n足够大时Long的范围都无发表示。
思路使用全排列的思想将从1到n-1位9的数字存入char数组中,因为使用全排列所以使用递归的思想。
package Coding;
public class Print_n {
public void PrintToMaxOfDigit (int number){
if(number <= 0)
System.out.println("请输入正确的数字!");
else {
char[] result = new char[number];
for (int i = 0; i < 10; i++) {
result[0] = (char) (i + '0');
FullPermutationNumber(result, 0, number);
}
}
}
public void FullPermutationNumber(char[] result,int index,int number){
if(index != number - 1){
for(int i = 0;i < 10;i++) {
result[index + 1] = (char) (i + '0');
FullPermutationNumber(result, index + 1, number);
}
}else{
PrintNumber(result , number);
}
}
public void PrintNumber(char[] result,int number){
boolean flag = false;
for (int i = 0; i < number; i++) {
if(result[i] != '0')
flag = true;
if(flag)
System.out.print(result[i]);
}
if(flag)
System.out.println();
}
}
测试用例:
package Coding.test;
import Coding.Print_n;
import org.junit.Test;
public class ResultTest {
@Test
public void Print_nTest1(){
Print_n test = new Print_n();
test.PrintToMaxOfDigit(-1);
}
@Test
public void Print_nTest2(){
Print_n test = new Print_n();
test.PrintToMaxOfDigit(0);
}
@Test
public void Print_nTest3(){
Print_n test = new Print_n();
test.PrintToMaxOfDigit(3);
}
}