Leetcode Push-001

1. 兩數(shù)之和 :

題目 : https://leetcode-cn.com/problems/two-sum/

兩數(shù)之和的O(n)算法

O(n)算法實(shí)現(xiàn):

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ans = new int[2] ; 
        Map<Integer,Integer> bt = new HashMap<>() ; 
        for (int i= 0 ;i <nums.length ;i++){
            if(bt.containsKey( target - nums[i]) ){
                return new int[]{i, bt.get(target - nums[i])} ; 
            }
            else{
                bt.put(nums[i],i) ; 
            }
        }
        return ans; 
    }
}

2. 兩數(shù)相加 :

題目 : https://leetcode-cn.com/problems/two-sum/

兩數(shù)相加

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode ans = new ListNode() ;
        //邊界情況處理
        if(l1 == null && l2 == null) return ans; 
        if(l1 == null) return l2; 
        if(l2 == null) return l1; 

        //開始構(gòu)建ans指向的鏈表柜裸,ans是頭節(jié)點(diǎn)
        ListNode current = ans ;
        //記錄進(jìn)位數(shù)
        int carry = 0 ;
        //兩個(gè)鏈表都還有值
        while(l1 != null && l2 != null){
            int v1 = l1.val ;
            int v2 = l2.val ;
            ListNode thisNode = new ListNode( (v1 + v2 + carry)%10 ) ; 
            current.next = thisNode ; 
            current = current.next;
            l1 = l1.next;
            l2 = l2.next;
            carry = (v1 + v2 + carry)/10 ;  
        }
        //鏈表2有值
        while(l2 != null){
            int v2 = l2.val; 
            ListNode thisNode = new ListNode( (v2 + carry)%10 ) ; 
            current.next = thisNode ; 
            current = current.next;
            l2 = l2.next;
            carry = (v2 + carry)/10 ; 
        }
        //鏈表1有值
        while(l1 != null){
            int v1 = l1.val; 
            ListNode thisNode = new ListNode( (v1 + carry)%10 ) ; 
            current.next = thisNode ; 
            current = current.next;
            l1 = l1.next;      
            carry = (v1 + carry)/10 ;      
        }
        if(carry > 0) {
            ListNode thisNode = new ListNode( carry ) ; 
            current.next = thisNode ; 
            current = current.next;
        }
        ans = ans.next ;     //注意這一步
        return ans; 
    }
}

3.整數(shù)反轉(zhuǎn) :

整數(shù)反轉(zhuǎn)思路
class Solution {
    public int reverse(int x) {
        int ans = 0 ; 
        while(x != 0){
            //如果已經(jīng)達(dá)到了Integer.MAX_VALUE/10的級(jí)別缕陕,那么下個(gè)迭代肯定越界了
            if(ans > Integer.MAX_VALUE/10 || ans < -1 * Integer.MAX_VALUE/10)
            {
                return 0 ;
            }
            int dig = x % 10 ; 
            x = x/10 ;
            ans = ans * 10 + dig ;
        }
        return ans ; 
    }
}

4. 字符串轉(zhuǎn)換整數(shù) (atoi)

題目地址 : https://leetcode-cn.com/problems/string-to-integer-atoi/
該題是中等難度,我寫出了思路疙挺,但是因?yàn)橐绯鰲l件測(cè)試了很久都沒有通過扛邑,這里溢出時(shí),需要注意铐然,必須測(cè)試ans 和 Integer.MAX_VALUE/10的大小關(guān)系蔬崩,不能判斷相加結(jié)果與Integer.MAX_VALUE的關(guān)系,因?yàn)橄嗉右绯龊蟛笫睿苯又稻妥兞肆ぱ簟T擃}還有個(gè)難點(diǎn)桐罕,就是int的最大值是2147483647,如果加完之后等于 2147483646 那就不溢出了死宣,所以這里判斷溢出的條件是:ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE/10 && lg > 7)
下邊是完整的代碼 :

class Solution {
    public int myAtoi(String s) {
        //去除空格
        String clearStr = s.trim() ;
        if(clearStr.length() == 0) return 0 ;
        //ans保存最終的數(shù)字和,flag表示輸出正數(shù)還是負(fù)數(shù)
        int ans = 0 , flag = 1 , lg =0 ;
        //處理第一位為 + 或者 - 的情況
        if(clearStr.charAt(0) == '+' || clearStr.charAt(0) == '-'){
            flag = clearStr.charAt(0) == '+' ? 1:-1;
            clearStr = clearStr.substring(1) ;
        }
        char[] chList = clearStr.toCharArray() ;
        for(char p : chList){ 
            //這里的判斷char是數(shù)字的字符的方法,值得記下來
            if (p >= '0' && p <= '9'){
                lg = p - 48;
                //這里的越界判斷,測(cè)試了很久召噩,需要注意
                if(ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE/10 && lg > 7)){
                    ans = flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE ;
                    return ans;
                }
                else{
                    ans = ans*10 + lg ;
                }
            }
            else{
                //非數(shù)字字符'0'~'9'直接退出了
                return ans * flag ;
            }
        }
        return ans*flag ;
    }
}

5. 回文數(shù)

題目地址: https://leetcode-cn.com/problems/palindrome-number/
這個(gè)題目非常簡(jiǎn)單师倔,做了一次通過凶朗。核心是判斷回文字符串的一個(gè)方法,我的方法是將String轉(zhuǎn)化為Char Array宛畦,從第一個(gè)元素迭代到中間羊精,分別比對(duì) i 和 length-i 如果不一樣就不是回文,否則是回文燃少。

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) return false ;
        char[] cx = String.valueOf(x).toCharArray() ;
        if (cx.length == 1) return true ;
        /**
         *  4444
         */
        int len = cx.length;
        int mid = cx.length/2;
        boolean flag = true;
        for (int i =0;i<mid;i++){
            if(cx[i] != cx[len-1-i]){
                flag = false ;
                break;
            }
        }
        return flag ;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市帘皿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖堪滨,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褥赊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡押框,警方通過查閱死者的電腦和手機(jī)晋被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門欲侮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刁俭,“玉大人,你說我怎么就攤上這事∈罹梗” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵南蓬,是天一觀的道長(zhǎng)烧颖。 經(jīng)常有香客問我拆火,道長(zhǎng)模狭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任萌朱,我火速辦了婚禮翠霍,結(jié)果婚禮上躏将,老公的妹妹穿的比我還像新娘。我一直安慰自己掸鹅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布牡辽。 她就那樣靜靜地躺著奏黑,像睡著了一般窄俏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天庶近,我揣著相機(jī)與錄音溪椎,去河邊找鬼祖能。 笑死轧膘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼哀墓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤掰茶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年酣藻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怕轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诀紊。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莉测,死狀恐怖八孝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響遵馆,放射性物質(zhì)發(fā)生泄漏换况。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦瘤礁、人聲如沸赡盘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沟绪。三九已至绽慈,卻和暖如春久信,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留南用,地道東北人筑公。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓搓彻,卻偏偏與公主長(zhǎng)得像奋刽,于是被迫代替她去往敵國(guó)和親艰赞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佣谐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容