当前位置:   article > 正文

Golang | Leetcode Golang题解之第65题有效数字

Golang | Leetcode Golang题解之第65题有效数字

题目:

题解:

  1. type State int
  2. type CharType int
  3. const (
  4. STATE_INITIAL State = iota
  5. STATE_INT_SIGN
  6. STATE_INTEGER
  7. STATE_POINT
  8. STATE_POINT_WITHOUT_INT
  9. STATE_FRACTION
  10. STATE_EXP
  11. STATE_EXP_SIGN
  12. STATE_EXP_NUMBER
  13. STATE_END
  14. )
  15. const (
  16. CHAR_NUMBER CharType = iota
  17. CHAR_EXP
  18. CHAR_POINT
  19. CHAR_SIGN
  20. CHAR_ILLEGAL
  21. )
  22. func toCharType(ch byte) CharType {
  23. switch ch {
  24. case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  25. return CHAR_NUMBER
  26. case 'e', 'E':
  27. return CHAR_EXP
  28. case '.':
  29. return CHAR_POINT
  30. case '+', '-':
  31. return CHAR_SIGN
  32. default:
  33. return CHAR_ILLEGAL
  34. }
  35. }
  36. func isNumber(s string) bool {
  37. transfer := map[State]map[CharType]State{
  38. STATE_INITIAL: map[CharType]State{
  39. CHAR_NUMBER: STATE_INTEGER,
  40. CHAR_POINT: STATE_POINT_WITHOUT_INT,
  41. CHAR_SIGN: STATE_INT_SIGN,
  42. },
  43. STATE_INT_SIGN: map[CharType]State{
  44. CHAR_NUMBER: STATE_INTEGER,
  45. CHAR_POINT: STATE_POINT_WITHOUT_INT,
  46. },
  47. STATE_INTEGER: map[CharType]State{
  48. CHAR_NUMBER: STATE_INTEGER,
  49. CHAR_EXP: STATE_EXP,
  50. CHAR_POINT: STATE_POINT,
  51. },
  52. STATE_POINT: map[CharType]State{
  53. CHAR_NUMBER: STATE_FRACTION,
  54. CHAR_EXP: STATE_EXP,
  55. },
  56. STATE_POINT_WITHOUT_INT: map[CharType]State{
  57. CHAR_NUMBER: STATE_FRACTION,
  58. },
  59. STATE_FRACTION: map[CharType]State{
  60. CHAR_NUMBER: STATE_FRACTION,
  61. CHAR_EXP: STATE_EXP,
  62. },
  63. STATE_EXP: map[CharType]State{
  64. CHAR_NUMBER: STATE_EXP_NUMBER,
  65. CHAR_SIGN: STATE_EXP_SIGN,
  66. },
  67. STATE_EXP_SIGN: map[CharType]State{
  68. CHAR_NUMBER: STATE_EXP_NUMBER,
  69. },
  70. STATE_EXP_NUMBER: map[CharType]State{
  71. CHAR_NUMBER: STATE_EXP_NUMBER,
  72. },
  73. }
  74. state := STATE_INITIAL
  75. for i := 0; i < len(s); i++ {
  76. typ := toCharType(s[i])
  77. if _, ok := transfer[state][typ]; !ok {
  78. return false
  79. } else {
  80. state = transfer[state][typ]
  81. }
  82. }
  83. return state == STATE_INTEGER || state == STATE_POINT || state == STATE_FRACTION || state == STATE_EXP_NUMBER || state == STATE_END
  84. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/895868
推荐阅读
相关标签
  

闽ICP备14008679号