博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】atoi (hard) ★
阅读量:5371 次
发布时间:2019-06-15

本文共 1659 字,大约阅读时间需要 5 分钟。

虽然题目中说是easy, 但是我提交了10遍才过,就算hard吧。

 

主要是很多情况我都没有考虑到。并且有的时候我的规则和答案中的规则不同。

答案的规则:

1.前导空格全部跳过  “      123”  = 123

2.正负号要考虑   “+123” = 123  “-123” = -123

3.数字的前导0要跳过  “-0000123” = “-123”

4.在数字阶段遇到非数字值,数字截断  “-0000 123” = 0   “123a213" = 123

5.没有有效数字,返回0  ”+-123“ = 0

6.数字越界,返回 最大值2147483647 或最小值 -2147483648

 

思路:先用strcpy获取有效的数字部分(先跳过前导空格,获取正负号,截至到非数字部分)

        再判断strcpy长度,为0或只有一个+-号,返回0.  (没有有效数字)

        有有效数字,把获取的数字转换成字符串,strcmp判断是否相同。不同表示数字溢出。

                                                    若输入数字是正数,返回最大值,反之返回最小值。

#include 
#include
#include
#include
#include
#include
using namespace std;class Solution {public: int atoi(const char *str) { char scheck[100]; //判断是否溢出 char strcpy[100]; //输入字符串的有效数字部分 int ans = 0; int i = 0; int icpy = 0; //去掉前导空格 while(str[i] == ' ') { i++; } if(str[i] == '+' || str[i] == '-') { strcpy[icpy++] = str[i++]; } //去掉紧跟正负号的前导0 while(str[i] == '0') { i++; } for(;str[i] != '\0'; i++) { if( '0' <= str[i] && str[i] <= '9') { ans = ans * 10 + (str[i] - '0'); strcpy[icpy++] = str[i]; } else { break; } } strcpy[icpy] = '\0'; if(strlen(strcpy) == 0) { return 0; } else if(strlen(strcpy) == 1 && (strcpy[0] == '+' || strcpy[0] == '-')) { return 0; } if(strcpy[0] == '-') { ans = 0 - ans; sprintf(scheck, "%d", ans); } else if(strcpy[0] == '+') { scheck[0] = '+'; sprintf(scheck+1, "%d", ans); } else { sprintf(scheck, "%d", ans); } if(strcmp(scheck, strcpy) != 0) { if(strcpy[0] == '-') { ans = -2147483648; } else { ans = 2147483647; } } return ans; }};int main(){ Solution s; char str[50] = "2147483648"; int ans = s.atoi(str); return 0;}

 

转载于:https://www.cnblogs.com/dplearning/p/4137098.html

你可能感兴趣的文章
周记2018.8.27~9.2
查看>>
MySQL中 1305-FUNCTION liangshanhero2.getdate does not exit 问题解决
查看>>
python序列化和json
查看>>
mongodb
查看>>
网格与无网格
查看>>
SSH-struts2的异常处理
查看>>
《30天自制操作系统》学习笔记--第14天
查看>>
LGPL协议的理解
查看>>
1、Python基础
查看>>
Unity The Tag Attribute Matching Rule
查看>>
试着理解下kvm
查看>>
WebService学习总结(二)--使用JDK开发WebService
查看>>
Tizen参考手机RD-210和RD-PQ
查看>>
竞价广告系统-位置拍卖理论
查看>>
策略模式 C#
查看>>
[模板]树状数组
查看>>
[HDU 6447][2018CCPC网络选拔赛 1010][YJJ's Salesman][离散化+线段树+DP]
查看>>
设计模式学习的好方法
查看>>
感谢Leslie Ma
查看>>
几种排序方法
查看>>