从
闲聊
本月1日开始每天打印leet代码的每日问题。 今天是12号。 前面的问题都很顺利,今天的这个问题是我无知,求两条线的交点【面问题16.03 .交点】。 刚看完题,哇,这不是一元二次方程组吗? 很简单。 中学数学吧。 写着,半个小时后。 在解决问题的地区见面了。 编码内功真的很考验,很容易写错。 不是,接今天的主题【字符串转换整数】请实现可以将
看题总结
字符串转换为整数的atoi函数。首先,该函数根据需要丢弃无用的前导空格,直到找到第一个非空格字符。 以下转换规则如下
如果第一个非空字符是正或负符号,请将符号与后面尽可能多的连续数字组合形成有符号的整数。 如果第一个非空字符是数字,则直接将后面的数字字符组合成整数。 由于此字符串在有效整数部分之后可能也有多余的字符,因此可以忽略这些字符,不要影响函数。 注:如果字符串的第一个非空白字符不是有效的整数字符,字符串为空,或者字符串中只包含空白字符,则不需要转换函数。 也就是说,无法有效地进行转换。
在所有情况下,如果函数未有效转换,则返回0。
提示:
正题的空白字符只包含空白字符“”。 假设我们的环境只能存储32比特大小的有符号整数,其数值范围为[ 231,231 ]。 如果数值超出该范围,请返回int_max(231 )或int_min ) 231 )。 样本1:
输入: '42 '
输出: 42
样本2:
输入: ' -42”
输出: -42
解释:的第一个非空格字符是“-”,是减号。
我们尽量把减号和后面所有连续的数字组合起来,最后得到-42。
样本3:
输入: '4193 with words ' (带宽度)
输出: 4193
解释:转换以数字'3'结束。 因为下一个字母不是数字。
例4:
输入: 'words and 987 '
输出: 0
解释:的第一个非空格字符是“w”,但不是数字、正或负号。
因此,无法执行有效的转换。 样本5:
输入: '-91283472332 '
输出: -2147483648
解释:数字“-91283472332”超过32位有符号整数范围。
因此,返回int_min(231 )。
相关主题
数学字符串通过阅读主题,可以得出以下结论
的类型是字符串问题,是指向给定的字符输出整数输入安全判断,空字符串返回值,不能转换为0
多解法及复杂度分析
这个问题的解法,分为三个步骤消除前导空间,处理正负识别号码,注意过境情况。 公共关系(字符串) {
if (str==空值||str.length (==0) ) ) ) )。
返回0;
}
int索引=0;
//1 .消除开头空间
while(indexstr.length () str.charat (charat )索引)=' ' ) ) )。
索引;
}
if (索引==str.length () ) ) ) ) )。
返回0;
}
//2 .判断符号
int sign=1;
if(indexstr.length(str.charat )索引)=='-'|str.charat )==''}{
sign=str.charat (索引)=='-'? -1 : 1;
索引;
}
//3 .识别数字
英特尔=0;
wile(indexstr.length () ) ) ) ) ) ) )。
int digit=str.charat (索引)- '0);
if (数字0|| |数字9 ) {
布莱克;
}
//过境处理
if ((整数.最大值/十个值)|)整数.最大值/十个值==整数.最大值数字) {
返回符号==1? integer.max _ value :整合器. min _ value;
}
tatol=tatol * 10数字;
索引;
}
返回总数*签名;
}复杂度分析
时间复杂度: o(n ),遍历字符串s一次
空间复杂性: o(1)只使用了几个变量
技巧与心得
开设github仓库,记录各种问题的解说。 向idea和vs代码都提供了leecode的插件。 调试简单,遇到无法切断流程的问题也不要慌,冷静下来直接解题的文字类的表现不如视图类的直觉。 文字和文字结合精选,优先图解,也可以参考leetcode国际站宗旨绿色问题的解说图。 在哔哩哔哩和YouTube上,可以通过leecode的标题,搜索高收视率的视频,多次浏览这篇文章并向我学习。 LeetCode教你如何刷题。 我相信你一定能自信地在最后的最后
看到最后。 你应该对本题有不同的感受。 如果这里有错误的地方或建议等,请留言告诉我; 请告诉我如果有疑问或者不同的看法的话,我们也可以一起讨论学习!我是twdxz。 你应该吃。 你应该喝。 你应该学习。 一起加油吧。
单击左下角,查看所有leet代码高级问题解决代码