题目描述(困难难度)

273. Integer to English Words - 图1

将数字用英文单词表示。

思路分析

没有什么特殊的方法,分析规律就可以了,主要有几个点。

  • 每三位一组
  • 小于 20 的和大于 20 的分开考虑
  • 单词之间空格的处理
  • 每三位后边增加个单位,从右数除了第一组,以后每一组后边依次加单位, Thousand", "Million", "Billion"
  • 我们从右到左遍历,是在倒着完善结果

解法一

空格的处理,在每个单词前加空格,最后返回结果的时候调用 trim 函数去掉头尾的空格。

倒着遍历的处理,利用 insert 函数,每次在 0 的位置插入单词。

下边的代码供参考,每个人的代码写出来应该都不同。

  1. public String numberToWords(int num) {
  2. if (num == 0) {
  3. return "Zero";
  4. }
  5. //个位和十位
  6. String[] nums1 = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven",
  7. "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
  8. //十位
  9. String[] nums2 = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
  10. //单位
  11. String[] nums3 = { "", "Thousand", "Million", "Billion" };
  12. StringBuilder result = new StringBuilder();
  13. int count = 0; // 记录第几组,方便加单位
  14. while (num > 0) {
  15. int threeNum = num % 1000;
  16. //当前组大于 0 才加单位
  17. if (threeNum > 0) {
  18. result.insert(0, " " + nums3[count]);
  19. }
  20. count++;
  21. int twoNum = num % 100;
  22. if (twoNum < 20) {
  23. //小于 20 两位同时考虑
  24. if (twoNum > 0) {
  25. result.insert(0, " " + nums1[twoNum]);
  26. }
  27. } else {
  28. //个位
  29. if (twoNum % 10 > 0) {
  30. result.insert(0, " " + nums1[twoNum % 10]);
  31. }
  32. //十位
  33. result.insert(0, " " + nums2[twoNum / 10]);
  34. }
  35. //百位
  36. if (threeNum >= 100) {
  37. result.insert(0, " Hundred");
  38. result.insert(0, " " + nums1[threeNum / 100]);
  39. }
  40. num /= 1000;
  41. }
  42. return result.toString().trim();
  43. }

主要就是对问题的梳理,不是很难。

windliang wechat

添加好友一起进步~

如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^

如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 这里 查看详情