Letcode刷题心得

每日至少一题,每一题的思考时间不要超过半个小时,解题过程不要超过一个小时,超过了就看答案!

Q7 : Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321

click to show spoilers.

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

Subscribe to see which companies asked this question.

解题方式1

public class Solution {

    public static int reverse(int x) {

        String xStr=x+"";

        int length = xStr.length();

        if(length==1){
            return Integer.parseInt(xStr);
        }

        int tmp=0;
        if(x<0){
            tmp=-1;
            xStr=xStr.substring(1,length);
            length--;
        }
        char tail='a';
        char head='a';

        String t="";
        String s="";
        for(int i=0;i<length&&length-1-i>=i;i++){

            tail=xStr.charAt(length-1-i);
            head=xStr.charAt(i);
            if(i==length-i-1){
                s=s+tail;
            }else{
                s=s+tail;
                t=head+t;
            }
        }

        xStr=s+t;
        long longval=Long.parseLong(xStr);

        if(tmp<0){
            longval=-longval;
        }


        if(longval>2147483647||longval<-2147483648){
            return 0;
        }

        else{
            return (int)longval;
        }

    }
}

解题思路 : 解题思路很简单就是将int数转化为一个String然后载把它从头到尾的截取为s、t两个字符串,然后载拼接起来就行,载这之中需要注意的是int数据的越界问题,和int数据分别为正和负的时候分情况讨论

Q6:
解题方式1

public class Solution {
     public  String convert(String s, int numRows) {
        if(numRows==1){
            return s;
        }

        int i1=numRows;
        int i2=s.length();//这里需要注意长度一定安排够长,不然容易造成数组越界
        char[] charS=s.toCharArray();
        int sIndex=0;
        char[][] tmp=new char[i1][i2];
        int[] indexs=new int[i1];

        boolean flag=false;//这是一个标志变量,用它来控制j的加和减

        int j=0;
        while(j>=0&&j<=numRows-1&&sIndex<charS.length){
            if(!flag){//加的情况
                tmp[j][indexs[j]++]=charS[sIndex++];

                j++;
                flag=false;
                if(j==numRows){
                    flag=true;
                    j-=2;
                    continue;
                }
            }else if(flag){//减得情况
                char tt=charS[sIndex++];
                tmp[j][indexs[j]++]=tt;
                j--;
                flag=true;

                if(j==-1){
                    flag=false;
                    j+=2;
                    continue;
                }
            }
        }
        String rtn="";
        char[] c=null;
        for(int i=0;i<numRows;i++){
            c=tmp[i];
            for(int k=0;k<c.length;k++){
                if(c[k]!='\0'){
                    rtn+=c[k];
                }
            }
        }
        return rtn;
    }
}

解题思路 : 将字符串拆分为字节数组,然后载新建一个二维的字节数据来模拟的目标拆分所需要的航和列,然后载拆分的过程中用一个flag变量决定目标字节填充的行数即二维数组的行数(flag决定加减)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值