【罗马数字转整数】算法优化笔记
生活随笔
收集整理的這篇文章主要介紹了
【罗马数字转整数】算法优化笔记
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。
羅馬數(shù)字包含以下七種字符: I, V, X, L,C,D 和 M。
字符 數(shù)值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如, 羅馬數(shù)字 2 寫做 II ,即為兩個(gè)并列的 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。這個(gè)特殊的規(guī)則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來(lái)表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左邊,來(lái)表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左邊,來(lái)表示 400 和 900。給定一個(gè)羅馬數(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.來(lái)源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/roman-to-integer
初步分析
本章總結(jié)
【小總結(jié)】
1.【哈希表的使用】
2.【關(guān)系的歸納】
詳細(xì)代碼
哈希表版
public class Solution {public int RomanToInt(string s) {int sum = 0;Dictionary<string, int> dic = new Dictionary<string, int>();dic.Add("I", 1);dic.Add("IV", 4);dic.Add("V", 5);dic.Add("IX", 9);dic.Add("X", 10);dic.Add("XL", 40);dic.Add("L", 50);dic.Add("XC", 90);dic.Add("C", 100);dic.Add("CD", 400);dic.Add("D", 500);dic.Add("CM", 900);dic.Add("M", 1000);for (int i = s.Length-1; i >=0 ; i--){if (i > 0){if (dic.ContainsKey(s[i - 1].ToString() + s[i].ToString())){sum = sum + dic[s[i - 1].ToString() + s[i].ToString()];i--;}elsesum = sum + dic[s[i].ToString()];}else{sum = sum + dic[s[i].ToString()];} }return sum;} }關(guān)系歸納版
public class Solution {public int RomanToInt(string s) {int sum = 0;int preNum = getValue(s[0]);for(int i = 1;i < s.Length; i ++) {int num = getValue(s[i]);if(preNum < num) {sum -= preNum;} else {sum += preNum;}preNum = num;}sum += preNum;return sum;}private int getValue(char ch) {switch(ch) {case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}} } 位運(yùn)算符:(a & b)按位與運(yùn)算符:參與運(yùn)算的兩個(gè)值,如果兩個(gè)相應(yīng)位都為1,則該位的結(jié)果為1,否則為0輸出結(jié)果 12 ,二進(jìn)制解釋: 0000 1100(a | b)按位或運(yùn)算符:只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。輸出結(jié)果 61 ,二進(jìn)制解釋: 0011 1101(a ^ b)按位異或運(yùn)算符:當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1輸出結(jié)果 49 ,二進(jìn)制解釋: 0011 0001(~a )按位取反運(yùn)算符:對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)? 。~x 類似于 -x-1輸出結(jié)果 -61 ,二進(jìn)制解釋: 1100 0011,在一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。a << 2左移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由 << 右邊的數(shù)字指定了移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。輸出結(jié)果 240 ,二進(jìn)制解釋: 1111 0000a >> 2右移動(dòng)運(yùn)算符:把">>"左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,>> 右邊的數(shù)字指定了移動(dòng)的位數(shù)輸出結(jié)果 15 ,二進(jìn)制解釋: 0000 1111賦值運(yùn)算符:*= 乘法賦值運(yùn)算符 c *= a 等效于 c = c * a/= 除法賦值運(yùn)算符 c /= a 等效于 c = c / a%= 取模賦值運(yùn)算符 c %= a 等效于 c = c % a**= 冪賦值運(yùn)算符 c **= a 等效于 c = c ** a//= 取整除賦值運(yùn)算符 c //= a 等效于 c = c // a作者:boywithacoin_cn
鏈接:https://leetcode-cn.com/problems/reverse-integer/solution/pythondan-chu-he-tui-ru-shu-zi-yi-chu-qian-jin-xin/
來(lái)源:力扣(LeetCode) 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
以下是個(gè)人初步版本垃圾代碼僅供參考
public class Solution {public int RomanToInt(string s) {Stack<char> stack = new Stack<char>(s.Length);int sum = 0;for (int i = s.Length - 1; i >= 0; i--){switch (s[i]){case 'I':{if (stack.Count==0|| (stack.Peek() != 'V' && stack.Peek() != 'X'))sum = sum + 1;elsesum = sum - 1;break;}case 'V':sum = sum + 5;break;case 'X':{if (stack.Count == 0 || (stack.Peek() != 'L' && stack.Peek() != 'C'))sum = sum + 10;elsesum = sum - 10;break;}case 'L':sum = sum + 50;break;case 'C':{if (stack.Count == 0 || (stack.Peek() != 'D' && stack.Peek() != 'M'))sum = sum + 100;elsesum = sum - 100;break;}case 'D':sum = sum + 500;break;case 'M':sum = sum + 1000;break;}stack.Push(s[i]);}return sum;} }總結(jié)
以上是生活随笔為你收集整理的【罗马数字转整数】算法优化笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【回文数】算法优化笔记
- 下一篇: 【最长公共前缀】算法优化笔记