1. 程式人生 > >每日一刷--Leetcode

每日一刷--Leetcode

以後每10天組一篇blog

2018.9.13    Q

2018.9.14    Q7

涉及到了int在記憶體中是如何儲存的,查查資料。

計算機中所有的整型資料都是以補碼來存的(正數補碼是本身,負數補碼是原碼取反再加一)。

Java基本資料型別,byte是1B,char是2B,short 是2B,int 是4B,float是4B,double是8B,long是8B。因此int 可表示的最大數為2^31-1(Java中用 Integer.MAX_VALUE 表示),可表示的最小數為 -2^31(Integer.MIN_VALUE)。

本題中如何判斷是否溢位呢?有兩種思路:一是對操作後的數進行逆操作,看是否等於原來的數;二是用 long 型做運算,若結果超出了 int 型可表示的範圍,則認為溢位。

什麼時候會發生溢位呢?以8位的資料為例,119正常(小於127),但反轉之後變為911,溢位。

2018.9.18    Q8

有要實現的任務後就一步一步逐條去實現。先測試正常的資料用例,再想想溢位(上下溢)、邊界等特殊情況。若判斷一定溢位(資料位過長),則可以直接結束迴圈執行return;特殊測試用例如 數字開始前有多個0,那麼就不能用資料位的多少來判斷,需要在拆出資料前將之前多餘的0去掉。

剛開始想用Java做,但和C的語法會記混,而且之前形成的C的思路(比如對陣列的操作)已經比較熟悉,感覺比Java更直接。以後可以試試兩種都做,熟練後選擇最合適的語言解題。或者可以瞭解一下C++,,,

明天學習一下正則表示式,這道題用正則表示式不知道好不好做。