leetcode刷題筆記(簡單篇):70&83

No70.爬樓梯

1.題目

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。

示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1.  1+ 12.  23. 
示例 2:
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
4.  1+ 1+ 15.  1+ 26.  2+ 1

2.算法思路

不難發現樓梯階數與方法數的關係滿足費布拉切數列

樓梯階數1	2	3	4	5	...
方法數  1	2	3	5	8	...

在這裏插入圖片描述

3.算法代碼

class Solution {
    public int climbStairs(int n) {
        if(n <= 3){
            return n;
        }
         int result = 0;
         int ll = 2;		//左左節點
         int l=3;			//左節點
        for(int i=3;i<n;i++){
            result = ll+l;
            ll = l;
            l = result;
        }
        return result;
    }
}

No83.刪除排序鏈表中的重複元素

1.題目

給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。

示例 1:
輸入: 1->1->2
輸出: 1->2

示例 2:
輸入: 1->1->2->3->3
輸出: 1->2->3

2.算法思路

每次衝鏈表中拿到頭元素,然後和它後面的一個元素(如果有的話)比較。

  1. 若頭元素的值和它後一個元素的值相等,則把它後面的那個節點刪除(temp.next = temp.next.next)
  2. 若不相等,則繼續判斷鏈表的下一個節點。

3.算法代碼

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode temp = head;
       while(temp != null && temp.next != null){		//後面一個節點要存在
           if(temp.val == temp.next.val){	//步驟1:相等的情況
               temp.next = temp.next.next;
           }else{							//步驟2:不相等的情況
             temp = temp.next;
           }
       }
       return head;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章