zoukankan      html  css  js  c++  java
  • 65. 有效数字 力扣 模拟题 细节,string用法

    题目描述:

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

    一个 小数 或者 整数
    (可选)一个 'e' 或 'E' ,后面跟着一个 整数
    小数(按顺序)可以分成以下几个部分:

    (可选)一个符号字符('+' 或 '-')
    下述格式之一:
    至少一位数字,后面跟着一个点 '.'
    至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    一个点 '.' ,后面跟着至少一位数字
    整数(按顺序)可以分成以下几个部分:

    (可选)一个符号字符('+' 或 '-')
    至少一位数字
    部分有效数字列举如下:

    ["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
    部分无效数字列举如下:

    ["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
    给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

    题源:https://leetcode-cn.com/problems/valid-number/

    题解:全靠细节

    string取一小截,可以用string.substr(起始位置,长度)

    class Solution {
    public:
        bool isint(string s)
        {
            int l=s.size();
            int i=0;
            if (s[i]=='+' || s[i]=='-') i++;
            int num=0;  //需要考虑的细节,就是至少是有一个数字的
            for(;i<l;i++)
             if (s[i]>='0' && s[i]<='9')   {num++; continue;}
               else return false;
            if(num>0) return true;
              else return false;
        }
    
        bool isfloat(string s)
        {
            int l=s.size();
            int flagdot=0;
            int posdot=-1;
            int i=0;
            if (s[i]=='+' || s[i]=='-') i++;
    
            for(int j=i;j<l;j++)
              if(s[j]=='.') { flagdot++; posdot=j;}
            if (flagdot!=1) return false;
    
            int num=0;  //需要考虑的细节,就是至少是有一个数字的
            for(;i<posdot;i++)
             if(s[i]>='0' && s[i]<='9') {num++; continue;}
                else return false;
    
            for(i=posdot+1;i<l;i++)
                if(s[i]>='0' && s[i]<='9') {num++; continue;}
                else return false;
            if (num>0)  return true;
              else return false;
        }
    
        bool isNumber(string s) {
        int l=s.size();
    
         int flagE=0;
         int posE=-1;
         for(int i=0;i<l;i++)
          if (s[i]=='E' || s[i]=='e')  {flagE++; posE=i;}
         if (flagE>1) return false;
        
         bool res=1;
         if (flagE==1)
         {
             
             if( isint(s.substr(posE+1,l-posE)) &&  
                 ( isint(s.substr(0,posE-0)) || isfloat(s.substr(0,posE-0)) ) )
                  return true;
              else return false; 
         }
         else 
         {
             if ( isint(s.substr(0,posE-0)) || isfloat(s.substr(0,posE-0)) ) return true;
                else return false;
         }
    
        }
    };
  • 相关阅读:
    949. Largest Time for Given Digits
    450. Delete Node in a BST
    983. Minimum Cost For Tickets
    16. 3Sum Closest java solutions
    73. Set Matrix Zeroes java solutions
    347. Top K Frequent Elements java solutions
    215. Kth Largest Element in an Array java solutions
    75. Sort Colors java solutions
    38. Count and Say java solutions
    371. Sum of Two Integers java solutions
  • 原文地址:https://www.cnblogs.com/stepping/p/14893642.html
Copyright © 2011-2022 走看看