[英]What is the best way to find out if a string is a roman number?
幾乎所有的例子都是關於將羅馬數字轉換為整數。 將所有羅馬數字一一轉換然后檢查該數字是否大於 0 是否有意義?
不確定你是否能從盒子里找到任何東西。 創建自己的函數:
private static Dictionary<char, int> _romanMap = new Dictionary<char, int>
{
{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
};
public static int IsRoman(string text) {
foreach (var c in text)
if (!_romanMap.ContainsKey(char))
return 0;
return 1
}
你可以做這樣的事情......不漂亮但是......
public class Solution {
public int RomanToInt(string s) {
var total = 0;
var currentNumber = 0;
var lastNumber = 0;
var lastRoman = '/';
// Take results from 's' and iterate through chars
foreach (var roman in s)
{
if (roman.Equals('I'))
{
currentNumber = 1;
}
else if (roman.Equals('V'))
{
currentNumber = 5;
}
else if (roman.Equals('X'))
{
currentNumber = 10;
}
else if (roman.Equals('L'))
{
currentNumber = 50;
}
else if (roman.Equals('C'))
{
currentNumber = 100;
}
else if (roman.Equals('D'))
{
currentNumber = 500;
}
else if (roman.Equals('M'))
{
currentNumber = 1000;
}
// Account for edge cases
if (roman.Equals('V') && lastRoman.Equals('I') || roman.Equals('X') && lastRoman.Equals('I') || // I can be placed before V (5) and X (10) to make 4 and 9.
roman.Equals('L') && lastRoman.Equals('X') || roman.Equals('C') && lastRoman.Equals('X') || // X can be placed before L (50) and C (100) to make 40 and 90.
roman.Equals('D') && lastRoman.Equals('C') || roman.Equals('M') && lastRoman.Equals('C') ) // C can be placed before D (500) and M (1000) to make 400 and 900.
{
var subtract = currentNumber - lastNumber;
total = total - lastNumber + subtract;
}
else
{
total = currentNumber + total;
}
lastRoman = roman;
lastNumber = currentNumber;
}
return total;
}
}
我還沒有對此進行廣泛的測試,但是在我編寫它的時候它通過了 leetcode 檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.