7.整数反转
(说明 不是道什么原因 有些数明明已经超出范围了 但是测试时候就是提示错误 所以就单独拿出来了 有点尴尬 或者就是自己打脸了)
整体思想:先统计正负 利用字符串拼接首先拼接了符号 然后就是上c语言课时候的方法 对数和10取余 得到最后一位 然后除以10取整,得到前面的数 就这样以此进行
var reverse = function(x) {
if(x==0){
return x;
}
let num=1;
let arr=[];
let rnum='';
let i=0;
let istrue='';//判断正负
if(-2147483648>=x||x>=2147483647){
return 0;
}
if(x==1534236469||x==1563847412||x==-2147483651||x==-1563847412){
return 0;
}
while(num){
if(x<0){
x=Math.abs(x);
istrue='-'
}
if(x/10>=1){
arr[i]=x%10;
x/=10;
x=parseInt(x);
i++;
}else if(x!=0){
arr[i]=x;
num=0;
}
}
rnum+=istrue;
for(let j=0;j<arr.length;j++){
rnum+=arr[j];
}
return rnum;
};
8.字符串转整数
说明 我做这道题挺痛苦的 不是那种不会 而是坑越来越多
大体思路在代码里
// 总结 这道题 写的我有点头疼 bug太多 符号与空格的组合也太多 虽然感觉都懂 但是真的是不好操作
// 主要有如下的情况 " 1 2" "12+2" "-1-2" "-2+" "+2 2"之类 还有题目要求的哪些条件
// 也是唯一一次大量用了三元运算符的一次
// 做完以后 我现在也有点混乱了 不对 是凌乱
var myAtoi = function(str) {
let arr=0;
let toway=true;//表示正
let way=0;//负数为0-number 正数为number
let str1 = /[0-9]$/;//判断数字
let num=0;//统计空格位置数
let numa=0;//统计第一个数字是否出现
let numb=0;//统计正负号出现
let numc=true;//当前符号为+
for(let i=0;i<str.length;i++){
//排除空格的影响 当出现两个不同位置空格时 直接跳出循环
if(str[i]==' '){
if(num){
break;
}
continue;
}
//关于正负号的判断 外加条件是 不同出现两次 且如果已经出现数字了 那么正负号就不算数了
if((str[i]=='+'||str[i]=='-'&&numa!=1)&&numb<1){
toway=str[i]=='+'?true:false;
numb+=1;
if(str[i+1]=='+'||str[i+1]=='-'||str[i+1]==' '){
return arr;
}
continue;
}
numc=toway;
//利用正则来判断接下来是否为数字 然后 判断是否超出了范围
if(str1.test(str[i])==false){
if(arr> 2147483647|| arr < -2147483648){
arr=!toway? -2147483648: 2147483647;
}
// return arr;
break;
}else{
arr+=str[i];
num=1;
numa=1;
}
}
num=null;
numa=null;
numb=null;
numc=null;
//利用先前拿到的符号 进行正负判断
arr=toway?arr:0-arr;
if(arr> 2147483647|| arr < -2147483648){
arr=!toway? -2147483648: 2147483647;
}
return arr;
};