leetcode解题记录(一)
僅為自己的學習做記錄
1、leetcode1:兩數之和
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
我的思路:題目已經給出提示The returned array must be malloced, assume caller calls free().
所以需要定義一個存放數組下標的數組,代碼如下:
2、leetcode7:整數反轉
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例1:
輸入: 123
輸出: 321
示例2:
輸入: -123
輸出: -321
示例3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [?231, 231 ? 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。
我的思路:整數反轉,與上題思路一致。這里需要注意整數溢出。
tips
代碼如下:
int reverse(int x) {long i = 0;long t = x;while (t){i = 10 * i + (t % 10);t /= 10;}if (i < INT_MIN || i >INT_MAX) {return 0;}return i;}3、leetcode9: 回文數
判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例1:
輸入:121
輸出:true
示例2:
輸出:-121
輸出:false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數。
示例3:
輸入:10
輸出:false
從右向左讀, 為 01 。因此它不是一個回文數。
我的思路:把數字倒置后與原來的數相比較即可,代碼如下:
bool isPalindrome(int x){int r = 0;int m = x;if(x<0)return false;else{while(x){r=r*10+x%10;x/=10;}if(x==m)return false;elsereturn true;} }但是提交之后顯示解答錯誤
Line 5: Char 25: runtime error: signed integer overflow: 746384741 * 10 cannot be represented in type 'int' (solution.c)
越界int最大值
查詢資料后更改代碼如下:
4、leetcode13:羅馬數字轉整數
羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。
例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的范圍內。
示例1:
輸入: "III"
輸出: 3
示例2:
輸入: "IV"
輸出: 4
示例3:
輸入: "IX"
輸出: 9
示例4:
輸入: "LVIII"
輸出: 58
解釋: L = 50, V= 5, III = 3.
示例5:
輸入: "MCMXCIV"
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.
我的思路:遍歷輸入字符串,如果當前字符代表數字小于上一個字符,直接相加。否則當前值減去上一位的值*2。代碼如下:
int romanToInt(char * s){int result=0,roman=0,temp=0;while (*s){switch (*s){case 'I':temp =1;break;case 'V':temp =5;break;case 'X':temp =10;break;case 'L':temp =50;break;case 'C':temp =100;break;case 'D':temp =500;break;case 'M':temp =1000;}if(temp>roman){result = result + (temp - roman*2);}else{result = result + temp;}roman = temp;}return result; }5、leetcode182:查找重復的電子郵箱
編寫一個 SQL 查詢,查找 Person 表中所有重復的電子郵箱。
示例:
根據以上輸入,你的查詢應返回以下結果:
+---------+ | Email | +---------+ | a@b.com | +---------+說明:所有電子郵箱都是小寫字母。
我的思路:這題比較簡單哈哈哈哈,代碼如下:
總結
以上是生活随笔為你收集整理的leetcode解题记录(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 流数据模型
- 下一篇: 在运行Loaded runtime Cu