[抄题]:
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
Example 1:
Input: 123 Output: "One Hundred Twenty Three"
Example 2:
Input: 12345 Output: "Twelve Thousand Three Hundred Forty Five"
Example 3:
Input: 1234567 Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
个位数是0的时候不用说zero,直接说英文名就行了
所以<10数组的第一位是“”
[思维问题]:
不知道怎么把数字分开,/ k % k就行了,但是这道题的重点并不是把数分开,而是如何处理10、20、100内有英文名的特殊数字以及hundred thousand million billion
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[一句话思路]:
“英文名” + 每次都新建字符串的helper函数连接一下就行了
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
可能出现空格字符串啊,所以都先赋值给result, 最后再统一string.trim一下
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
记住10、20、100内有英文名的特殊数字以及hundred thousand million billion 才有英文名
helper函数中每次都新建字符串,才能和一般字符串用+连接
[复杂度]:Time complexity: O(n) Space complexity: O(1)
[算法思想:递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :

public class Solution { private final String[] belowTen = new String[] {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; private final String[] belowTwenty = new String[] {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; private final String[] belowHundred = new String[] {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; public String numberToWords(int num) { if (num == 0) return "Zero"; return helper(num); } private String helper(int num) { String result = new String(); if (num < 10) result = belowTen[num]; else if (num < 20) result = belowTwenty[num -10]; else if (num < 100) result = belowHundred[num/10] + " " + helper(num % 10); else if (num < 1000) result = helper(num/100) + " Hundred " + helper(num % 100); else if (num < 1000000) result = helper(num/1000) + " Thousand " + helper(num % 1000); else if (num < 1000000000) result = helper(num/1000000) + " Million " + helper(num % 1000000); else result = helper(num/1000000000) + " Billion " + helper(num % 1000000000); return result.trim(); } }