leetcode解题记录(一)
僅為自己的學(xué)習(xí)做記錄
1、leetcode1:兩數(shù)之和
給定一個整數(shù)數(shù)組 nums 和一個目標(biāo)值 target,請你在該數(shù)組中找出和為目標(biāo)值的那 兩個 整數(shù),并返回他們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,你不能重復(fù)利用這個數(shù)組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
我的思路:題目已經(jīng)給出提示The returned array must be malloced, assume caller calls free().
所以需要定義一個存放數(shù)組下標(biāo)的數(shù)組,代碼如下:
2、leetcode7:整數(shù)反轉(zhuǎn)
給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)。
示例1:
輸入: 123
輸出: 321
示例2:
輸入: -123
輸出: -321
示例3:
輸入: 120
輸出: 21
注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?231, 231 ? 1]。請根據(jù)這個假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。
我的思路:整數(shù)反轉(zhuǎn),與上題思路一致。這里需要注意整數(shù)溢出。
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: 回文數(shù)
判斷一個整數(shù)是否是回文數(shù)。回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。
示例1:
輸入:121
輸出:true
示例2:
輸出:-121
輸出:false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數(shù)。
示例3:
輸入:10
輸出:false
從右向左讀, 為 01 。因此它不是一個回文數(shù)。
我的思路:把數(shù)字倒置后與原來的數(shù)相比較即可,代碼如下:
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:羅馬數(shù)字轉(zhuǎn)整數(shù)
羅馬數(shù)字包含以下七種字符: I, V, X, L,C,D 和 M。
例如, 羅馬數(shù)字 2 寫做 II ,即為兩個并列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為 IX。這個特殊的規(guī)則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1 到 3999 的范圍內(nèi)。
示例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.
我的思路:遍歷輸入字符串,如果當(dāng)前字符代表數(shù)字小于上一個字符,直接相加。否則當(dāng)前值減去上一位的值*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:查找重復(fù)的電子郵箱
編寫一個 SQL 查詢,查找 Person 表中所有重復(fù)的電子郵箱。
示例:
根據(jù)以上輸入,你的查詢應(yīng)返回以下結(jié)果:
+---------+ | Email | +---------+ | a@b.com | +---------+說明:所有電子郵箱都是小寫字母。
我的思路:這題比較簡單哈哈哈哈,代碼如下:
總結(jié)
以上是生活随笔為你收集整理的leetcode解题记录(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 流数据模型
- 下一篇: 在运行Loaded runtime Cu