首页 > 其他分享 >剑指 Offer 20. 表示数值的字符串

剑指 Offer 20. 表示数值的字符串

时间:2023-04-08 22:57:02浏览次数:53  
标签:last Offer int symbol return 字符串 20 false first

题目链接:剑指 Offer 20. 表示数值的字符串

方法:模拟

解题思路

根据题意模拟,详情见代码注释。

代码

class Solution {
public:
    bool isDecimal(string s){
        int first_symbol = s.find_first_of('.'); // 第一个'.'的位置
        int last_symbol = s.find_last_of('.'); // 最后一个'.'的位置
        if (first_symbol != last_symbol || first_symbol == string::npos) return false; // 当有多个'.' 或者 没有时,false
        bool flag = true;
        if (s[0] == '-' || s[0] == '+') { // eat '-' / '+',同时更新first_sybol
            s = s.substr(1);
            first_symbol -- ;
        }
        if (s[0] == '.') { // 小数情况-3
            if (s.length() == 1) flag = false;
            else {
                for (int i = 1; i < s.length(); i ++ ) {
                    if (s[i] >= '0' && s[i] <= '9') continue;
                    else {
                        flag = false;
                        break;
                    }
                }
            }
        } else { // 小数情况-1、2
            for (int i = 0; i < s.length(); i ++ ) {
                if (i == first_symbol) continue;
                if (s[i] >= '0' && s[i] <= '9') continue;
                else {
                    flag = false;
                    break;
                }
            }
        }
        return flag;
    }

    bool isInteger(string s){
        if (s.length() == 1 && (s[0] == '-' || s[0] == '+')) return false;
        if (s[0] == '-' || s[0] == '+') s = s.substr(1); // eat '-' / '+'
        for (int i = 0; i < s.length(); i ++ ) {
            if (s[i] >= '0' && s[i] <= '9') continue;
            return false;
        }
        if (s.length() == 0) return false;
        return true;
    }

    bool isNumber(string s) {
        int l = 0, r = s.length() - 1;
        while (s[l] == ' ' && l < r) l ++ ;
        while (s[r] == ' ' && r > l) r -- ;
        s = s.substr(l, r - l + 1);
        if (s.length() == 1 && s == " ") return false;
        
        int first_E = s.find_first_of("eE"); // 查找s中第一个'e' / 'E'的位置
        int last_E = s.find_last_of("eE"); // 查找s中最后一个'e' / 'E'的位置
        if (first_E != last_E) return false;
        
        if (first_E == string::npos) return isInteger(s) || isDecimal(s);
        else { // 按照e/E分为两边
            string str1 = s.substr(0, first_E), str2 = s.substr(first_E + 1);
            return (isInteger(str1) || isDecimal(str1)) && isInteger(str2);
        }
    }
};

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

标签:last,Offer,int,symbol,return,字符串,20,false,first
From: https://www.cnblogs.com/lxycoding/p/17299472.html

相关文章

  • 每日总结2023-04-08
    今天实现了AndroidStudio的高德地图APK定位packagecom.example.math.www_user;importandroidx.annotation.NonNull;importandroidx.appcompat.app.AppCompatActivity;importandroid.Manifest;importandroid.os.Bundle;importandroid.util.Log;importandroid.wid......
  • 2023年郑州轻工业大学校赛邀请赛yy
    这也是第一次参加几个人以组队的形式来进行答题、评比,而且这是一场线下赛,收获更是很多。题目一共有十二道,一共五个小时,我们上来也是没有头绪先做哪个,可能三个人的思路不太一样,我们最终先写了第一题,写出来后,也是很自信提交。但是很遗憾的运行超时,换了一种之后还是超时,慢慢就放弃了(......
  • 2023/4/8
    今天周六,参加了一场比赛。占用了大部分的时间,其他时间,又对团队项目做了些增加。因为,搜索,应该尽可能的强大。当然也询问了一些其他人的意见。给出的建议是把参数封装一下,封装成一个类。而不是单单的n多个参数。......
  • 2023年4月蓝桥杯B组A到G题解析
    试题A:阶乘求和本题总分:5分【问题描述】令S=1!+2!+3!+...+202320232023!,求S的末尾9位数字。提示:答案首位不为0。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得......
  • P1972 [SDOI2009] HH的项链
    P1972[SDOI2009]HH的项链【解法一】树状数组解法本题核心:如何判断一个区间内的贝壳是否重复?当右端点\(r\)固定时,不论\(l\)取何值,对于任意一组重复的贝壳,都可以只统计最右端的贝壳。原因:设一组重复贝壳中最右端的贝壳所在的位置为\(pos_r\),那么当\(pos_r<l\)时,其他......
  • JavaWeb-jsp-19课-JSP语法-2023-04-08
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>$Title$</title></head><body><%--注释JSP带百分号--%><%=newjava.util.Date()%>&l......
  • 电阻触摸屏与 XPT2046 芯片简介
    触摸屏包括两种,一种为电容触摸屏,另一种为电阻触摸屏。电阻触摸屏的优点是:价格便宜,适合特殊工况(湿度较大、有水珠的环境)。电容触摸屏的优点是:支持多点触控,精度高。 XPT2046 是专用于电阻式触摸屏的芯片,其基于四线SPI 通信协议。其ADC的精度为12位。 测量坐标原理:  ......
  • 2023年4月8日
    执行重画ER图,整理数据库表系统架构设计修改页面配色,先改完前两个,交给小芳,再该配色article文章表bug缺陷表bug_log缺陷日志表comment评论表debug表是调试用的表error是错误码表hot_search热搜interface接口log是日志表menu菜单module模块表project项目表(项目封......
  • 如何保护群晖NAS中的AutoHotkey自动化热键脚本程序源代码 2023年4月8日
       如何保护群晖NAS中的AutoHotkey自动化热键脚本程序源代码2023年4月8日    通过RaiDrive_v1.5.3.1或者MountDuck或者WebDrive或者NetDrive2或者SynologyDriveClient异地远程连接群晖NAS的SFTP或者WebDAV文件服务并映射网络驱动器之后(公网IP地址、DDNS动态域......
  • 2023.04.08 定时测试随笔
    T2[ZJOI2007]时态同步传送门:luoguP1131题目要求我们用最少的代价使根节点到每个叶子节点的距离相等那如何使代价最小呢,对于下面这种情况对于有同一个父亲节点的两个叶子节点,一个的代价为5,一个代价为3,他们都加了一个代价3,这样我们可以把3加到父亲节点到根节点的树枝上,这......