题目

image.png

用到的知识

集合排序

  1. //对数字进行排序
  2. List<Integer> nums = Arrays.asList(3,1,5,2,9,8,4,10,6,7);
  3. nums.sort(Comparator.reverseOrder()); //reverseOrder倒序
  4. System.err.println("倒序:"+nums);
  5. nums.sort(Comparator.naturalOrder()); //naturalOrder自然排序即:正序
  6. System.err.println("正序:"+nums);

解题代码

  1. class Solution {
  2. public String originalDigits(String s) {
  3. /**
  4. * 0: zero z
  5. * 1: one
  6. * 2: two w
  7. * 3: three
  8. * 4: four u
  9. * 5: five
  10. * 6: six x
  11. * 7: seven
  12. * 8: eight g
  13. * 9: nine
  14. *
  15. * g,u, w,x,z
  16. *
  17. * zero,two,four, six ,eight,
  18. *
  19. * one,three,five,seven,
  20. * r,s,f,o
  21. */
  22. char[] chars = s.toCharArray();
  23. Map<Character,Integer> map = new HashMap<>();
  24. for (char c: chars ) {
  25. map.put(c,map.getOrDefault(c,0) + 1);
  26. }
  27. //除去只出现一次的数字
  28. List<Integer> l = new ArrayList<>();
  29. if(map.containsKey('z')) {
  30. addList('z',map,0,l,"zero");
  31. }
  32. if(map.containsKey('w')) {
  33. addList('w',map,2,l,"two");
  34. }
  35. if(map.containsKey('u')) {
  36. addList('u',map,4,l,"four");
  37. }
  38. if(map.containsKey('x')) {
  39. addList('x',map,6,l,"six");
  40. }
  41. if(map.containsKey('g')) {
  42. addList('g',map,8,l,"eight");
  43. }
  44. /**
  45. * one,three,five,seven,
  46. * * r,s,f,o
  47. */
  48. //排除上述 数字,除去只出现一次的数字
  49. if(map.containsKey('o')) {
  50. addList('o',map,1,l,"one");
  51. }
  52. if(map.containsKey('r')) {
  53. addList('r',map,3,l,"three");
  54. }
  55. if(map.containsKey('f')) {
  56. addList('f',map,5,l,"five");
  57. }
  58. if(map.containsKey('s')) {
  59. addList('s',map,7,l,"seven");
  60. }
  61. //nine 统计i或者e的个数
  62. if(map.containsKey('i')) {
  63. addList('i',map,9,l,"nine");
  64. }
  65. l.sort(Comparator.naturalOrder());
  66. String result = l.stream().map( t -> String.valueOf(t)).collect(Collectors.joining(""));
  67. return result;
  68. }
  69. public void addList(char c,Map<Character,Integer> map,int num, List<Integer> l,String s) {
  70. int len = map.get(c); //统计出现次数
  71. for(int i = 0; i < len ; i++ ) {
  72. l.add(num); //加入集合
  73. }
  74. char[] chars = s.toCharArray();
  75. for (int i = 0; i < chars.length; i++) {
  76. int value = map.get(chars[i])- len;
  77. if(value == 0) { //为0删除char
  78. map.remove(chars[i]);
  79. } else {
  80. map.put(chars[i], value ) ; //更新字符出现次数
  81. }
  82. }
  83. }
  84. }