今天开始讲和大家坚持打卡面试非常重要算法练习---剑指offer,希望我们能一起肝。
1 题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0
2 思路----c++
判断非法字符。每个字符按照公式转换number*10+str[i]-'0';
3 代码实现
c++版本
class Solution {
public:
int StrToInt(string str) {
//空字符串
if(str.size()==0) return 0;
//判断是否带符号
bool isSign=false;
if(str[0]=='+' || str[0]=='-') isSign=true;
//判断是否含其他非法符号
for(int i=isSign+0;i {
if(str[i]>='0' && str[i]<='9') continue;
else return 0;
}
//开始转换 转换方法:number*10+str[i]-'0'
unsigned long number=0;
for(int i=isSign+0;i
number=number*10+str[i]-'0';
}
if(str[0]=='-') return -number;
else return number;
}
};
java版本
public class Solution {
public int StrToInt(String str) {
int res = 0;
//正则合法检测
if (!str.matches("\\+{0,1}\\-{0,1}[0-9]{1,}"))
return res;
int len = str.length();
for (int i = len - 1; i >= (str.charAt(0) == '-' || str.charAt(0) == '+' ? 1 : 0); i--) {
res += (int) Math.pow(10, (len - 1 - i)) * (str.charAt(i) - '0');
}
return str.charAt(0) == '-' ? -res : res;
}
python版本
# -*- coding:utf-8 -*-
class Solution:
def StrToInt(self, s):
# write code here
if s == "" or s == '+' or s == '-':
return 0
for i in s:
if i == '+' or i == '-':
continue
if '0' '9':
pass
else:
return 0
return int(s)
4 唠嗑
[剑指offer]20二叉树的镜像[剑指offer]19连续子数组最大和[剑指offer]2替换空格[剑指offer]3从尾到头打印链表[剑指offer]4栈实现队列[剑指offer]5斐波那契数列[剑指offer]6跳台阶[剑指offer]8二进制中1的个数炸裂!万字长文拿下HTTP2020年8月2日打卡,打卡格式"打卡XX天"。暖蓝汇聚大家一起,探讨简历修改,面试经历分享,尽全力让大家能在2020找到理想的工作。如果你想加入,加我拉你进面试交流群。