将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
数据范围:字符串长度满足
进阶:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
输入一个字符串,包括数字字母符号,可以为空
如果是合法的数值表达则返回该数字,否则返回0
"+2147483647"
2147483647
"1a33"
0
function StrToInt(str) { // write code here let num = str.trim().match(/^[+-]?\d+$/) if(!num || num == '-0') return 0 let Max = 2 ** 31 - 1 let Min = -(2 ** 31) return num >= Max ? Max : num <= Min ? Min : num } module.exports = { StrToInt : StrToInt };
function StrToInt(str) { // write code here //1、直接使用JavaScript的转换函数 // if(str == '-2147483649' || str == '2147483648') return 0; // return Number(str) ? parseInt(str) : 0; //2、循环判断 var sum = 0; if(str[0] == '+' || str[0] == '-'){ if(str.length == 1){ return 0 } for(var j = 1;j<str.length;j++){ if(str.charCodeAt(j) >48 && str.charCodeAt(j) <= 57){ sum = sum * 10 + (str.charAt(j) - 0); }else{ return 0; } } if(str[0] == '-'){ sum = sum * (-1); } }else{ for(var k = 0;k<str.length;k++){ if(str.charCodeAt(k) >=48 && str.charCodeAt(k) <= 57){ sum = sum * 10 +(str.charAt(k) - 0); }else{ return 0; } } } return sum; }
/** * 我的解题思路: * 1.首先对传入字符串的符号进行处理,判断首位是否传入了符号,如果带有符号就先去掉符号,便于后续处理 * 2.接着判断一下剩余的字符串是否数字,这里采用一种简单的判断方法,即使用正则test,因为test的参数就是字符串 * 3.而如何将字符串数字转换成真正的数字,这里使用数字转字符串再判断的方式来获取每一位的数字 * 4.然后根据字符串数字的位置来对数字进行乘10运算,并将每一位的结果相加即可 * 5.最后就是根据前面获取的符合来返回整数或者负数即可 * * @param {*} str */ function StrToInt(str) { // write code here let symbol = true; if (str[0] === '-') { symbol = false; str = str.slice(1); } if (str[0] === '+') { str = str.slice(1); } if (!/^[1-9]\d*$/.test(str) || str === '0') { return 0; } let result = 0; const numbers = [...Array(10).keys()]; for (let i = str.length - 1; i >= 0; i--) { let n = numbers.find(item => item.toString() === str[i]); let tenNum = str.length - 1 - i; while (tenNum--) { n *= 10; } result += n; } return symbol ? result : -result; } /** * 评论区TOP的解题思路: * 1.在评论区并没有看到很好的解题思路 * 2.由于JS语言的特性,不能对字符串进行加减操作,不然会在内部之间进行转换 * * @param {*} str */ function topStrToInt(str) { // write code here }
首先需要注意排除空字符串,然后注意标记符号,接下来就是遍历,一个一个的去判断,最后再判断是否超出边界。
##代码
function StrToInt(str) { // write code here let len=str.length; let flag=1,res=0; if(!str) return 0;//如果为空,返回0 if(str[0]=='-') flag=-1; for(let i = (str[0] == '-' || str[0] == '+') ? 1 : 0; i < len; ++i){//如果第一位是正负号,则从第二位开始 if(str[i]<'0'||str[i]>'9') return 0; res=res*10+(str[i]-'0'); } return res * flag < -2147483648 || res * flag > 2147483647 ? 0 : res * flag // 判断超出大于限定范围 }
function StrToInt(str) { // write code here if(str == ''){ return 0; } let numlist = ['0','1','2','3','4','5','6','7','8','9']; let sum = 0,label = 1; if(str[0] == '+'){ label = 1; for(let i = 1, len = str.length; i < len; i++){ if(numlist.indexOf(str[i]) == '-1'){ return 0; }else{ sum = sum*10 + numlist.indexOf(str[i]); } } }else if(str[0] == '-'){ label = -1; for(let i = 1, len = str.length; i < len; i++){ if(numlist.indexOf(str[i]) == '-1'){ return 0; }else{ sum = sum*10 + numlist.indexOf(str[i]); } } }else{ for(let i = 0, len = str.length; i < len; i++){ if(numlist.indexOf(str[i]) == '-1'){ return 0; }else{ sum = sum*10 + numlist.indexOf(str[i]); } } } let res = sum*label; if(res >= -0x80000000 && res <= 0x7FFFFFFF){ return res; }else{ return 0; } }
//JS解法 function StrToInt(str) { // write code here if(str==""){ return 0; } str=str.split(""); //将字符串转为数组 var len=str.length; //记录数组的长度 var res=""; //记录最终结果 var i; //记录仪首位从哪里开始 if((str[0]=="+"||str[0]=="-")&&str[1]){ //判断首位是否为正号或者负号 i=1; }else if(!str[1]){ //首位是符号且后面无数字,返回0 return 0; }else{ i=0; } for(i;i<len;i++){ if(str[i]>=0&&str[i]<=9){ res+=str[i]; }else{ //如果遇到不是数字的字符,则直接返回0 return 0; } } if(str[0]=="-"){ //首位为负号则返回负数 res="-"+res; } if(res>=2147483648||res<=-2147483649) return 0 //判断边界 return res; } module.exports = { StrToInt : StrToInt };
function StrToInt(str) { // write code here if (!str) return 0; const arr = str.split(''); const isSymbol = ['-', '+'].includes(arr[0]) ? 1 : 0; const negative = arr[0] === '-'; let sum = 0; for (let i = isSymbol; i < arr.length; i++) { if (arr[i] > '9' || arr[i] < '0') return 0; sum = (arr[i] - '0') * (10**(arr.length - 1 - i)) + sum; } return negative ? -sum : sum; }
function StrToInt(str)
{
var reg = [0,1,2,3,4,5,6,7,8,9];
var l = [];
var sum = 0;
for(var i = 0;i < str.length;i++){
for(var j = 0;j < reg.length;j++){
if(str[i]==reg[j]){
//十进制规则,当前位乘以对应权重
sum += reg[j]*Math.pow(10,(str.length-1-i));
l.push(i);
}
}
}
//处理‘+’,‘-’
if(str[0]=='-'){
return -sum;
}else if(str[0]=='+'){
return sum;
}
//如果转换结果长度不等于原来的长度,说明有的字符没有被转换,也就是存在非数字
if(l.length!==str.length){
return 0;
}
return sum;
}
function StrToInt(str) { if(/^[+|-]*\d*$/.test(str) == false){ return 0 } return parseInt(str) || 0 } module.exports = { StrToInt : StrToInt };javascript的处理用最少的代码处理最野的问题
function StrToInt(str) { if (str == undefined || str == '') { return 0; } const first = str[0]; let i = 1; let int = 0; if (first >= 0 && first <= 9) { int = first; } else if (first !== '-' && first !== '+') { return 0; } while (i < str.length) { if (str[i] >= 0 && str[i] <= 9) { int = int * 10 + (str[i] - 0); i++; } else { return 0; } } return first === '-' ? 0 - int : int; }