1. 程式人生 > >leetcode easy刷題心得

leetcode easy刷題心得

持續更新

67.二進位制求和

給定兩個二進位制,返回他們的和。輸入為非空字串並且只包含1和0.

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder result = new StringBuilder();   //StringBuider是可以隨時修改的,但String是不可修改的,所以StringBuider的速度比String快得多,詳情見下。
        
        int al = a.length()-1;
        int bl = b.length()-1;
        
int carry = 0; while( al >=0 || bl >=0 ) { int sum = carry; if(al >= 0) { sum += (a.charAt(al) - '0'); al--; } if(bl >= 0) { sum += (b.charAt(bl) - '0'); bl
--; } result.append(sum%2); //相加結果 carry = sum /2; //進位,如果是1那麼carry=0,如果是2則要進位給下面一位+1 } if(carry !=0 ) //都相加完了,還要進位的情況 result.append(1); return result.reverse().toString(); //先反轉,再輸出 } }

 參考連結:

String,StringBuider和StringBuffer的區別


69.x的平方根

實現int sqrt(int x)函式,返回整數x的平方根,只保留整數部分,小數部分將被捨去(如8開方後為2.82842...,只留下2)

思路:使用二分搜尋法(在下面)來找平方根

 1 class Solution {
 2     public int mySqrt(int x) {
 3         if (x <= 1) return x;
 4         int left = 0, right = x;
 5         while (left < right) {
 6             int mid = left + (right - left) / 2;
 7             if (x / mid >= mid) left = mid + 1;
 8             else right = mid;
 9         }
10         return right - 1;
11     }
12 }

 二分搜尋法

一種常見的搜尋方法,將線性時間提升到了對數時間,大大的縮短了搜尋時間

參考連結

 


70.爬樓梯

一次可以爬一節或者兩節樓梯,求問第N節樓梯有幾種不同的爬法(給出2節樓梯有兩種爬法,三種樓梯有三種爬法)

思路:假如一共有n節樓梯,如何爬到第n節呢?因為每次只能爬一節或者兩節,第n層不然就是從n-1層一步上來的,不然就是n-2層兩步上來的,所以:sum[n]=sum[n-1]+sum[n-2]

 1 class Solution {
 2     public int climbStairs(int n) {
 3         if(n==1)return 1;       //如果只有一節樓梯,就只有一種爬法
 4         int sum[]=new int[n+1];   //sum[n]是第n節樓梯有幾種爬法
 5         sum[0]=0;sum[1]=1;sum[2]=2;
 6      for(int i=3;i<=n;i++){
 7          sum[i]=sum[i-2]+sum[i-1];  //
 8      }
 9         return sum[n];
10     }
11 }

 


83.刪除排序連結串列中的重複元素

連結串列

 


 

88.合併兩個陣列

將A、B兩個陣列的元素按大小合成一個數組

public class Solution {
    public void merge(int A[], int m, int B[], int n) {        //直接在A中插入,把A拓展成一個m+n大小的陣列
        while(m > 0 && n >0){
            if(A[m-1] > B[n-1]){      //A的最後一個和B的最後一個進行比較
                A[m+n-1] = A[m-1];
                m--;
            }else{
                A[m+n-1] = B[n-1];
                n--;
            }
        }
        while(n > 0){  //如果A的元素有剩餘,不用管,放在原地即可
            A[m+n-1] = B[n-1];            //如果B的元素有剩餘,直接把B多出來的元素全部放入A中
            n--;
        }
    }
}