日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode解题记录(一)

發布時間:2024/7/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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().
所以需要定義一個存放數組下標的數組,代碼如下:

/*** Note: The returned array must be malloced, assume caller calls free().*/ int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int *num = malloc(sizeof(int)*2);// 定義一個存放數組下標的數組for(int i = 0; i < numsSize - 1; i++){for(int j = i + 1; j < numsSize; j++){// 兩層循環if(nums[i] + nums[j] == target){num[0] = i;num[1] = j;*returnSize = 2;return num;}}}return 0; }

2、leetcode7:整數反轉
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例1:
輸入: 123
輸出: 321

示例2:
輸入: -123
輸出: -321

示例3:
輸入: 120
輸出: 21

注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [?231, 231 ? 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。

我的思路:整數反轉,與上題思路一致。這里需要注意整數溢出。
tips

C中常量INT_MAX和INT_MIN分別表示最大最小整數,定義在頭文件limits.h中。 因為int占4字節32位,根據二進制編碼的規則,INT_MAX = 2^31-1,INT_MIN= -2^31.C/C++中,所有超過該限值的數,都會出現溢出,出現warning,但是并不會出現error。如果想表示的整數超過了該限值,可以使用長整型long long 占8字節64位。`

代碼如下:

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最大值
查詢資料后更改代碼如下:

bool isPalindrome(int x){int temp = 0;//當x為負數,或者x的末尾為0時返回錯誤if(x<0 || (x%10==0 && x!=0)){return false;}while(x>temp){temp = temp*10 + x%10;x = x/10;}//分奇數偶數if(temp == x || temp/10 == x){return true;}else{return false;}}

4、leetcode13:羅馬數字轉整數
羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。

字符 數值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000

例如, 羅馬數字 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 表中所有重復的電子郵箱。
示例:

+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+

根據以上輸入,你的查詢應返回以下結果:

+---------+ | Email | +---------+ | a@b.com | +---------+

說明:所有電子郵箱都是小寫字母。
我的思路:這題比較簡單哈哈哈哈,代碼如下:

# Write your MySQL query statement below select Email from Person group by Email having count(Email)>1; 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的leetcode解题记录(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。