2020-06-10学习随笔(Java刷题)

序言

学习随笔是本人对自己一天的自学回顾,由于本人是非科班出身,不懂很多cs的专业术语,所以难免会有些错误,望各位批评指正,本人定当悉心接受并立即改正。希望自己能够慢慢坚持下去,坚持转行的道路,坚持每天学习的输出。

刷题篇

LeetCode

1.题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

2.大致思路

暴力解法:转成字符串,然后比较,其中负数肯定不是回文数,故单独写出。

还一种很容易想到的方法:通过取余数完成倒排存入到ArrayList中,之后求和与原数比较。但要注意几点,也是我在测试时发现的,具体在代码中体现。

以上两种方法都不是很好。

3.代码

class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0) return false;  //负数不是回文数
        String xstr = String.valueOf(x);  //   int转String
        for(int i = 0,j = xstr.length() - 1; i < xstr.length(); i++,j--){
    //这里好像不必遍历整个字符串,遍历一半即可  所以可改成 i < j
            if(xstr.charAt(i) != xstr.charAt(j)) return false;
        }
        return true;
    }
}

class Solution {
    public boolean isPalindrome(int x) {
        int count =0;
        int xnew = 0;
        int x1 = x;
        if(x < 0) return false;//负数不是回文数
        if(x == 2147483647) return false;
        //int的最大值2147483647,若超过了max,在后面计算xnew时,永远是这个最大值,反倒出错
        ArrayList num = new ArrayList<>();
        while(x != 0){
            //第一次循环条件写了x%10!=0,但这样101就很明显就会变成false,但实际是true
            num.add(x%10);//通过取余完成翻转
            x = x / 10;
            count++;
        }
        int count1 = count;
        for(int i = 0;i < count1 ;i++){
            xnew += num.get(i) * Math.pow(10,count-1);
            //通过get方法和Math类中的pow方法,计算xnew,注意是count-1
            count--;
        }
        if(xnew == x1) 
            return true;
        else 
            return false;

    }
}

4.多说两句

用到的类 String,类方法 length() , charAt( int index) , valueOf( int i )。

第一次自己写Java,所以上面的方法,基本不记得,只有length稍微有点印象,不过在写的时候还是忘记了写括号(),害。

高级解法以后再补,先完成c到Java的过渡,并且完成期末的安全着陆(后者更关键)。

切忌心浮气躁,急功近利。学习要慢慢来。

共勉!

你可能感兴趣的:(2020-06-10学习随笔(Java刷题))