LeetCode 每日一题 (字符串转换整数 (atoi))
我的题解表现:
class Solution { public: int myAtoi(string s) { int ret = 0; if (s.size() == 0){ return ret; } const char*p = s.c_str(); int i = 0; while(p[i] ==' ') i++; bool big0 = true; if ((p[i] != '+') && (p[i] != '-')){ if (!(p[i] >= '0') && (p[i] <= '9')){ return ret; } }else{ if (p[i] == '-'){ big0 = false; } i++; if (!(p[i] >= '0') && (p[i] <= '9')){ return ret; } } char a[11] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; // 大于10位就不用看了 int j = 0; while((p[i] >= '0') && (p[i] <= '9')){ if (j == 11){ break; } if (p[i] > '0') { a[j] = p[i] - '0'; j++; }else{ if (j == 0){ }else{ a[j] = 0; j++; } } i++; } if (a[9] == -1){ // 9 位 一定没有越界 for(int k = 0;k<9;k++){ if (a[k]>=0){ ret = ret * 10 + a[k]; }else{ break; } } if (!big0){ ret = 0 - ret; } return ret; } if (a[10] == -1) { // 10位 可能越界了 if (big0){ int b[10] = {2,1,4,7,4,8,3,6,4,7}; for(int k=0;k<10;k++){ if (a[k] == b[k]){ }else if (a[k] > b[k]){ // 越界了 a[k]待验证数组 首先出现大的情况 return 2147483647; }else{ for(int l=0;l<10;l++){ ret = ret * 10 + a[l]; } return ret; } } return 2147483647; }else{ // 可能是 9 或者10 int b[10] = {2,1,4,7,4,8,3,6,4,8}; for(int k=0;k<10;k++){ if (a[k] == b[k]){ }else if (a[k] > b[k]){ // 越界了 return -2147483648; }else if (a[k] < b[k]){ for(int l=0;l<10;l++){ ret = ret * 10 + a[l]; } return 0 - ret; } } return -2147483648; } }else{ // 一定 越界了 if (big0){ return 2147483647; }else{ return -2147483648; } } } };
分类:
LeetCode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现