leetcode(7,8)

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;
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值