Problem: 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。
Intuition: 由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 StringBuffer进行存储。既然是用StringBuffer来存,那么我们就要完成两个功能,第一个功能是如何对使用char数组存储的数字进行递增,第二个功能是如何将该数字打印出来(这个部分的核心代码主要是去掉符号扩展自动补上的0).
Solution: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 public class CodingInterview_017 { public static void main (String[] args) { Print1ToMaxOfNDigits(4 ); } public static void Print1ToMaxOfNDigits (int n) { StringBuffer stringBuffer=new StringBuffer(); for (int i=0 ;i<n;i++){ stringBuffer.append('0' ); } while (!Increment(stringBuffer)){ PrintNumber(stringBuffer); } } public static boolean Increment (StringBuffer s) { int carry=1 ; for (int i=s.length()-1 ;i>=0 ;i--){ int digit=s.charAt(i)-'0' ; digit=digit+carry; if (digit>=10 ){ digit-=10 ; carry=1 ; }else { carry=0 ; } s.setCharAt(i,(char )(digit+'0' )); } if (carry==1 ){ return true ; }else { return false ; } } public static void PrintNumber (StringBuffer s) { int startPos=0 ; for (int i=0 ;i<s.length();i++){ if (s.charAt(i)=='0' ){ startPos++; }else { break ; } } for (int i=startPos;i<s.length();i++){ System.out.print(s.charAt(i)); } System.out.println(); } }