leetcode第8题

简介: 将一个字符串转为整型。这道题,难度其实不大,和上道题有很多重合的地方。整体的思路就是遍历字符串,然后依次取出一个字符就可以了。无非是考虑一些特殊情况,还有就是理解题目意思。经过多次试错,题目的意思是这样的。从左遍历字符串,可以遇到空格,直到遇到 ' + ' 或者数字或者 ' - ' 就表示要转换的数字开始,如果之后遇到除了数字的其他字符(包括空格)就结束遍历,输出结果,不管后边有没有数字了,例如 " - 32332ada2323" 就输出 "- 32332"。如果遇到空格或者 ' + ' 或者数字或者 ' - ' 之前遇到了其他字符,就直接输出 0 ,例如 " we1332"。

image.png

top8

将一个字符串转为整型。

这道题,难度其实不大,和上道题有很多重合的地方。整体的思路就是遍历字符串,然后依次取出一个字符就可以了。无非是考虑一些特殊情况,还有就是理解题目意思。

经过多次试错,题目的意思是这样的。

从左遍历字符串,可以遇到空格,直到遇到 ' + ' 或者数字或者 ' - ' 就表示要转换的数字开始,如果之后遇到除了数字的其他字符(包括空格)就结束遍历,输出结果,不管后边有没有数字了,例如 " - 32332ada2323" 就输出 "- 32332"。

如果遇到空格或者 ' + ' 或者数字或者 ' - ' 之前遇到了其他字符,就直接输出 0 ,例如 " we1332"。

如果转换的数字超出了 int ,就返回 intMax 或者 intMin。

publicintmyAtoi(Stringstr) {
intsign=1;
intans=0, pop=0;
booleanhasSign=false; //代表是否开始转换数字for (inti=0; i<str.length(); i++) {
if (str.charAt(i) =='-'&&!hasSign) {
sign=-1;
hasSign=true;
continue;
            }
if (str.charAt(i) =='+'&&!hasSign) {
sign=1;
hasSign=true;
continue;
            }
if (str.charAt(i) ==' '&&!hasSign) {
continue;
            }
if (str.charAt(i) >='0'&&str.charAt(i) <='9') {
hasSign=true;
pop=str.charAt(i) -'0';
//和上道题判断出界一个意思只不过记得乘上 sign 。if (ans*sign>Integer.MAX_VALUE/10|| (ans*sign==Integer.MAX_VALUE/10&&pop*sign>7))
return2147483647;
if (ans*sign<Integer.MIN_VALUE/10|| (ans*sign==Integer.MIN_VALUE/10&&pop*sign<-8))
return-2147483648;
ans=ans*10+pop;
            } else {
returnans*sign;
            }
        }
returnans*sign;
    }

时间复杂度:O(n),n 是字符串的长度。

空间复杂度:O(1)。


总结

这道题让自己有点感到莫名其妙,好像没有 get 到出题人的点???


相关文章
|
算法
leetcode第10题
上边的递归,为了方便理解,简化下思路。 为了判断 text [ 0,len ] 的情况,需要知道 text [ 1,len ] 为了判断 text [ 1,len ] 的情况,需要知道 text [ 2,len ] 为了判断 text [ 2,len ] 的情况,需要知道 text [ 3,len ] ... 为了判断 text [ len - 1,len ] 的情况,需要知道 text [ len,len ] text [ len,len ] 肯定好求 求出 text [ len,len ] 的情况,就知道了 text [ len - 1,len ] 求出 text [ le
113 0
leetcode第10题
|
Java
leetcode-771 Jewels and Stones
771-Jewels and Stones(字符串中查找特有字符个数)
1711 0
|
9月前
|
消息中间件 Kubernetes NoSQL
LeetCode 3、28、1351
LeetCode 3、28、1351
leetcode第27题
上边的解法,我们是如果不等于 val 就赋值。但如果按题目的想法,应该是如果等于 val 就移除。我们从正方面去想,也就是等于 val 的话,我们怎么体现移除呢? 题目中有个说明我们没利用到,他告诉我们说 the order of those five elements can be arbitrary,就是说数组的顺序可以随便换,我们怎么充分利用呢? 我们可以这样,如果当前元素等于 val 了,我们就把它扔掉,然后将最后一个值赋值到当前位置,并且长度减去 1。什么意思呢? 比如 1 2 2 4 6,如果 val 等于 2 。那么当移动到 2 的时候,等于 val 了。我们就把最后一个位置的
121 0
leetcode第27题
|
算法
leetcode第32题
这几种算法,暴力破解和动态规划我觉得想的话,还是能分析出来的话,最后两种算法感觉是去挖掘题的本质得到的算法,普适性不是很强。但最后一种算法,从左到右,从右到左,是真的强。
117 0
leetcode第32题
leetcode第33题
问题出在,当数组剩偶数长度的时候,mid = (start + end)/ 2,mid 取的是左端点。上图的例子, mid > end, 更新 start = mid,start 位置并不会变化。那么下一次 mid 的值也不会变,就死循环了。所以,我们要更新 start = mid + 1。 综上,找最小值的下标的代码就出来了,同时,由于我们找的是位置 0 对应的下标,所以偏移就是最小值的下标.
leetcode第33题
|
算法
leetcode第40题
会发现出现了很多重复的结果,就是因为没有跳过重复的 1。在求 opt [ 1 ] 的时候就变成了 [ [ 1 ],[ 1 ] ] 这样子,由于后边求的时候都是直接在原来每一个列表里加数字,所有后边都是加了两次了。
leetcode第40题
|
机器学习/深度学习 自然语言处理 算法
每日算法系列【LeetCode 881】救生艇
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
167 0
每日算法系列【LeetCode 881】救生艇
|
9月前
|
C++ Python
leetcode-283:移动零
leetcode-283:移动零
32 0

热门文章

最新文章