zoukankan      html  css  js  c++  java
  • leetcode 65题——有效数字_自动机解_java实现

    leetcode 65题——有效数字_自动机解_java实现

    //20210508
    写在前面:今天刷leetcode刷到的题目,一开始用暴力写逻辑,漏洞百出,遂放弃,去看题解,发现使用自动机做(编译原理知识),实现之后觉得挺有意思(确实也是我不会的东西),所以在这里记录一下

    自动机逻辑:

    • 将系统中可能出现的状态列出来,并把从一个状态到另一个状态是否能够转移标记出来,最后生成一个二维状态数组,循环的时候使用数组状态转移,在状态为-1的时候返回false,如果循环之后没有返回,则判断最后的状态是否为状态图中可以为终态的状态结点,如果是,则返回true,否则返回false

    • 图解如下(比较潦草,看不懂可留言~):

    • 二维数组如下:

    题目描述

    • image

    程序源代码

    package algorithm;
    
    public class IsNumber {
        public static int make(char s){
            switch (s){
                case ' ':return 0;
                case '+':
                case '-':return 1;
                case '.':return 3;
                case 'E':
                case 'e':return 4;
                default:
                    if(s>='0'&&s<='9')return 2;
            }
            return -1;//其他情况
        }
    
        //自动机
        public static boolean isNumber(String s) {
            char[] sArr = s.toCharArray();
            int[][] global_state = {
                    {0,1,6,2,-1,-1},
                    {-1,-1,6,2,-1,-1},
                    {-1,-1,3,-1,-1,-1},
                    {8,-1,3,-1,4,-1},
                    {-1,7,5,-1,-1,-1},
                    {8,-1,5,-1,-1,-1},
                    {8,-1,6,3,4,-1},
                    {-1,-1,5,-1,-1,-1},
                    {8,-1,-1,-1,-1,-1}
            };
            int state = 0;
            for(int i = 0;i<sArr.length;++i){
                int temp = make(sArr[i]);
                if(temp==-1)return false;
                state = global_state[state][temp];
                if(state==-1) return false;
            }
            if(state==8||state==6||state==3||state==5) return true;
            return false;
        }
    
        public static void main(String[] args) {
            System.out.println(isNumber("0"));
        }
    }
    
    

    leetcode通过截图

  • 相关阅读:
    关于如何正确地在android项目中添加第三方jar包
    如何在asp.net页面使用css和js
    Prolog 外部不能有 DOCTYPE 声明。处理资源 'http://192.168.115.152:8082/api/EmpApi.aspx' 时出错。第 3 行,位置: 11
    怎样在iis中发布asp.net网站
    WInform 创建一个简单的WPF应用
    细说WPF数据绑定
    WPF控件模板
    DC画线
    第一部分 Mysql的基础
    链表○⇢习题集
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14746802.html
Copyright © 2011-2022 走看看