leetcode演算法題目 13

2021-10-09 07:47:07 字數 1796 閱讀 5981

羅馬數字包含以下七種字元:ivxlcdm

字元數值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。這個特殊的規則只適用於以下六種情況:

給定乙個羅馬數字,將其轉換成整數。輸入確保在 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.

/*解決思路*/

1、羅馬數字由 i,v,x,l,c,d,m 構成;

2、當小值在大值的左邊,則減小值,如 iv=5-1=4;

3、當小值在大值的右邊,則加小值,如 vi=5+1=6;

由上可知,右值永遠為正,即最後一位必然為正。

把乙個小值放在大值的左邊,就是做減法,否則為加法。

確定當前位,對比當前位與後一位的大小關係,從而確定當前位是加還是減法。當沒有下一位時,做加法即可。

class solution else

//將字元向後移位繼續進行計算

start_num = next_num;

}//將最後一位的結果加入

num_final = num_final + start_num;

return num_final;

}//返回每個值對應的結果

private int getcharnum(char c)

}}

LeetCode演算法題目 7

題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。解決方案 反轉整數的方法可以與反轉字串進行模擬。我們想重複 彈出 xx 的最後一位...

LeetCode演算法題目 3

給定乙個字串,找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為無重...

LeetCode演算法題目 4

給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 n...