羅馬數字包含以下七種字元: i, v, x, l,c,d 和 m。map字元 數值
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.
#include#include#includeusing namespace std;
class solution
else
} if (temp != "")
return result;
}};
編寫乙個函式來查詢字串陣列中的最長公共字首。1、橫向掃瞄(依次構造)如果不存在公共字首,返回空字串 ""。
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。
說明:所有輸入只包含小寫字母 a-z 。
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...