首页 > 其他分享 >leetcode-8,真恶心

leetcode-8,真恶心

时间:2024-07-29 12:17:07浏览次数:15  
标签:恶心 end string long state ans return leetcode

题目:

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

推导:

代码:

 1 class Automaton {
 2 public:
 3     int sign = 1; // 初始化默认符号
 4     long long ans = 0; // 初始化整数
 5     unordered_map<string, vector<string>> table = {
 6         {"start", {"start", "signed", "in_number", "end"}},
 7         {"signed", {"end", "end", "in_number", "end"}}, 
 8         {"in_number", {"end", "end", "in_number", "end"}},
 9         {"end", {"end", "end", "end", "end"}}
10     };
11 
12     // 定义输入类型
13     int get_char(char c) {
14         if (isspace(c)) return 0;
15         // 当比较字符时,确保使用单引号来表示字符字面量,而不是双引号的字符串字面量
16         if (c == '+' || c == '-') return 1;
17         if (isdigit(c)) return 2;
18         return 3;
19     }
20 
21     // 对输出整数进行操作
22     string output (char c, string state) {
23         // 状态转移
24         state = table[state][get_char(c)];
25 
26         // 计算整数
27         if (state == "in_number") {
28             ans = ans*10 + c - '0';
29             // 注意:这里采用 min(ans, -(long long)INT_MIN) 而不是 max(ans, (long long)INT_MIN) 是因为
30             // 这里的 ans 还没有乘 sign 这个正负号,所以都是非负数,自然就不能和下限进行比较了
31             ans = sign == 1 ? min(ans, (long long)INT_MAX) : min(ans, -(long long)INT_MIN);
32         }
33         // 计算正负
34         if (state == "signed") sign = c == '+'? 1 : -1;
35 
36 
37         return state;
38     }
39 };
40 
41 
42 class Solution {
43 public:
44     string state = "start";
45     int ans = 0;
46     int myAtoi(string s) {
47         Automaton automaton;
48         for (char c : s) {
49             state = automaton.output(c, state);
50         }
51         return automaton.sign * automaton.ans;
52     }
53 };

 

标签:恶心,end,string,long,state,ans,return,leetcode
From: https://www.cnblogs.com/2277241439qaq/p/18329838

相关文章

  • LeetCode 408场周赛,Q3. 统计 1 显著的字符串的数量;问题分析
    https://leetcode.cn/contest/weekly-contest-408/problems/count-the-number-of-substrings-with-dominant-ones/description/、、这题难度是middle,但是确实有点强思维的味道,赛时思考了许久,没想到好方向,最后想了个线段树的解法。。当然最后超时了861/884,二十多个用例过不去;......
  • LeetCode530. 二叉搜索树的最小绝对差
    题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/题目叙述:给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。示例1:输入:root=[4,2,6,1,3]输出:1示例2:输......
  • LeetCode654. 最大二叉树
    题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/题目叙述给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大......
  • (leetcode学习)295. 数据流的中位数
    中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如arr=[2,3,4] 的中位数是3 。例如 arr=[2,3]的中位数是(2+3)/2=2.5。实现MedianFinder类:MedianFinder()初始化MedianFinder 对象。voidaddN......
  • LeetCode700. 二叉搜索树中的搜索
    题目链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/description/题目叙述:给定二叉搜索树(BST)的根节点root和一个整数值val。你需要在BST中找到节点值等于val的节点。返回以该节点为根的子树。如果节点不存在,则返回null。示例1:输入:root=[1......
  • 【代码随想录训练营第42期 Day10打卡 LeetCode 232.用栈实现队列 225. 用队列实现栈 2
    目录一、做题心得二、题目与题解题目一:232.用栈实现队列题目链接题解题目二:225.用队列实现栈题目链接题解题目三:20.有效的括号题目链接题解题目四:1047.删除字符串中的所有相邻重复项 题目链接题解三、小结一、做题心得今天是代码随想录训练营打卡的第1......
  • LeetCode_sql_day07(579. 查询员工的累计薪水,2173.最多连胜的次数)
    描述:579.查询员工的累计薪水编写一个解决方案,在一个统一的表中计算出每个员工的 累计工资汇总 。员工的 累计工资汇总 可以计算如下:对于该员工工作的每个月,将 该月 和 前两个月 的工资 加 起来。这是他们当月的 3个月总工资和 。如果员工在前几个月没有为公......
  • LeetCode1005. K 次取反后最大化的数组和
    题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/题目叙述:给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为-nums[i]。重复这个过程恰好k次。可以多次选择同一个下标i。以这种......
  • LeetCode面试150——189轮转数组
    题目难度:中等默认优化目标:最小化平均时间复杂度。Python默认为Python3。1题目描述给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。示例1:输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右轮转1步:[7,1,2,3,4,5,6]......
  • leetcode-7
    题目:给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。推导:代码:classSolution{public:intreverse(intx){intres=0;while(x!=0){......