{ "question_id": 65, "question_title": "有效数字", "difficulty": "困难", "question_content": "

有效数字(按顺序)可以分成以下几个部分:

    \t
  1. 一个 小数 或者 整数
  2. \t
  3. (可选)一个 'e''E' ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

    \t
  1. (可选)一个符号字符('+''-'
  2. \t
  3. 下述格式之一:\t
      \t\t
    1. 至少一位数字,后面跟着一个点 '.'
    2. \t\t
    3. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    4. \t\t
    5. 一个点 '.' ,后面跟着至少一位数字
    6. \t
    \t

整数(按顺序)可以分成以下几个部分:

    \t
  1. (可选)一个符号字符('+''-'
  2. \t
  3. 至少一位数字

部分有效数字列举如下:

部分无效数字列举如下:

给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true

 

示例 1:

输入:s = \"0\"
输出:
true

示例 2:

输入:s = \"e\"
输出:
false

示例 3:

输入:s = \".\"
输出:
false

示例 4:

输入:s = \".1\"
输出:
true

 

提示:

", "topic_link": "https://bbs.csdn.net/topics/600470924", "cpp": "#include \n#include \n#include \n#include \nstatic bool isNumber(const char *s)\n{\n\twhile (*s == ' ')\n\t\t++s;\n\tbool if_find_num = false;\n\tif (*s == '-' || *s == '+')\n\t\t++s;\n\twhile (isdigit(*s))\n\t{\n\t\tif_find_num = true;\n\t\t++s;\n\t}\n\tif (*s == '.')\n\t\t++s;\n\twhile (isdigit(*s))\n\t{\n\t\tif_find_num = true;\n\t\t++s;\n\t}\n\tif (if_find_num == true && *s == 'e')\n\t{\n\t\t++s;\n\t\tif (*s == '+' || *s == '-')\n\t\t\t++s;\n\t\tif_find_num = false;\n\t\twhile (isdigit(*s))\n\t\t{\n\t\t\tif_find_num = true;\n\t\t\t++s;\n\t\t}\n\t}\n\twhile (*s == ' ')\n\t\t++s;\n\treturn *s == '\\0' && if_find_num == true;\n}\nint main(int argc, char **argv)\n{\n\tif (argc != 2)\n\t{\n\t\tfprintf(stderr, \"Usage: ./test number\\n\");\n\t\texit(-1);\n\t}\n\tprintf(\"%s\\n\", isNumber(argv[1]) ? \"true\" : \"false\");\n\treturn 0;\n}", "java": "class Solution {\n\tchar[] chars;\n\tboolean point = false;\n\tboolean exponent = false;\n\tpublic boolean isNumber(String s) {\n\t\ts = s.trim();\n\t\tint length = s.length();\n\t\tif (length == 0) {\n\t\t\treturn false;\n\t\t}\n\t\tchars = s.toCharArray();\n\t\tString[] ss = s.split(\"e\");\n\t\tif (ss.length == 0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (ss[0].length() == 0)\n\t\t\treturn false;\n\t\tif (ss[0].length() < length)\n\t\t\texponent = true;\n\t\tif (ss[0].length() == length - 1) {\n\t\t\treturn false;\n\t\t}\n\t\tString[] pre = ss[0].split(\"\\\\.\");\n\t\tif (pre.length == 0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (pre[0].length() < ss[0].length())\n\t\t\tpoint = true;\n\t\tboolean result = pre(0, pre[0].length());\n\t\tresult = result && middle(pre[0].length() + 1, ss[0].length());\n\t\tif (exponent) {\n\t\t\tresult = result && is(ss[0].length() + 1, length);\n\t\t}\n\t\treturn result;\n\t}\n\tpublic boolean pre(int i, int length) {\n\t\tif (i >= length) {\n\t\t\treturn true;\n\t\t}\n\t\tif (chars[i] == '+' || chars[i] == '-') {\n\t\t\ti++;\n\t\t}\n\t\tif (i == length && !point) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tif (chars[i] < '0' || chars[i] > '9') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tpublic boolean middle(int i, int length) {\n\t\tif (i >= length && point) {\n\t\t\tif (chars[i - 2] >= '0' && chars[i - 2] <= '9') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tif (chars[i] < '0' || chars[i] > '9') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tpublic boolean is(int i, int length) {\n\t\tif (i == 1) {\n\t\t\treturn false;\n\t\t}\n\t\tif (chars[i] == '+' || chars[i] == '-') {\n\t\t\ti++;\n\t\t}\n\t\tif (i == length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tif (chars[i] < '0' || chars[i] > '9') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}", "js": "", "python": "class Solution(object):\n\tdef isNumber(self, s):\n\t\ts = s.strip()\n\t\tls, pos = len(s), 0\n\t\tif ls == 0:\n\t\t\treturn False\n\t\tif s[pos] == '+' or s[pos] == '-':\n\t\t\tpos += 1\n\t\tisNumeric = False\n\t\twhile pos < ls and s[pos].isdigit():\n\t\t\tpos += 1\n\t\t\tisNumeric = True\n\t\tif pos < ls and s[pos] == '.':\n\t\t\tpos += 1\n\t\t\twhile pos < ls and s[pos].isdigit():\n\t\t\t\tpos += 1\n\t\t\t\tisNumeric = True\n\t\telif pos < ls and s[pos] == 'e' and isNumeric:\n\t\t\tisNumeric = False\n\t\t\tpos += 1\n\t\t\tif pos < ls and (s[pos] == '+' or s[pos] == '-'):\n\t\t\t\tpos += 1\n\t\t\twhile pos < ls and s[pos].isdigit():\n\t\t\t\tpos += 1\n\t\t\t\tisNumeric = True\n\t\tif pos == ls and isNumeric:\n\t\t\treturn True\n\t\treturn False\n# %%\ns = Solution()\nprint(s.isNumber(s = \"0\"))", "status": 1, "keywords": "字符串", "license": { "cpp": "https://github.com/begeekmyfriend/leetcode", "python": "https://github.com/qiyuangong/leetcode", "java": "https://blog.csdn.net/a1439775520/article/details/104340910" }, "notebook": { "cpp": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/64/64_cpp.ipynb?type=file", "python": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/64/64_python.ipynb?type=file", "java": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/64/64_java.ipynb?type=file" }, "notebook_enable": 1 }