LeetCode C 刷題 13 16題題解

2021-10-08 00:21:50 字數 3351 閱讀 2466

羅馬數字包含以下七種字元: 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.

map

#include#include#includeusing namespace std;

class solution

else

} if (temp != "")

return result;

}};

編寫乙個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

示例 1:

輸入: ["flower","flow","flight"]

輸出: "fl"

示例 2:

輸入: ["dog","racecar","car"]

輸出: ""

解釋: 輸入不存在公共字首。

說明:所有輸入只包含小寫字母 a-z 。

1、橫向掃瞄(依次構造)

2、鍊錶(依次刪減)

#include#include#includeusing namespace std;

class solution

string prex = "";

int i = 0;

while (true)

else

for (int j = 1; j < strs.size(); j++)

else if (prex != strs[j].substr(0, i + 1))

} i++;

} return "";*/

//2、鍊錶

if (strs.size() == 0)

string prex = strs[0];

for (int i = 1; i < strs.size(); i++)

int j = 0;

while (j < prex.size())

elseelse}}

} return prex;

}};

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[[-1, 0, 1],

[-1, -1, 2]

]

排序+雙指標

#include#include#includeusing namespace std;

class solution

//排序

sort(nums.begin(), nums.end());

//雙指標遍歷

for (int i = 0; i < nums.size() - 2; i++)

else if (nums[left] + nums[right] < target)

else }}

return result;

}};

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

示例:輸入:nums = [-1,2,1,-4], target = 1

輸出:2

解釋:與 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

3 <= nums.length <= 10^3

-10^3 <= nums[i] <= 10^3

-10^4 <= target <= 10^4

排序+雙指標

#include#include#includeusing namespace std;

class solution

//雙指標遍歷

int left = i + 1;

int right = nums.size() - 1;

while (left < right)

else if (nums[i] + nums[left] + nums[right] > target)

right--;

while (right > i && nums[right] == nums[right + 1]) right--;

}else

left++;

while (left < nums.size() && nums[left] == nums[left - 1])left++;}}

} return result;

}};

LeetCode C 刷題 53 56題題解

給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。1 雙指標法 2...

LeetCode C 刷題 69 72題題解

實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。二分 clas...

LeetCode C 刷題129 132題題解

目錄 129 求根到葉子節點數字之和 題目 題解 130 被圍繞的區域 題目 題解 131 分割回文串 題目 題解 132 分割回文串ii 題目 題解 給定乙個二叉樹,它的每個結點都存放乙個 0 9 的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑 1 2 3 代表數字 12...