我是飛鏢的新手。我試圖將整數轉換為羅馬。但它什么也不回傳。你們能幫幫我嗎?這是我的代碼示例。此代碼來自 Leetcode 問題部分。
class Solution {
String intToRoman(int num) {
List<int> numbers = [1,4,5,9,10,40,50,90,100,400,500,900,1000];
List<String> romans = ["I","IV","V","IX","X","XL","L","XC","C","CD","D","CM", "M"];
int index = romans.length - 1;
String roman = '';
for(num >0;numbers[index]<=num;){
roman = romans[index];
num -= numbers[index];
index -= 1;
}
return roman;
}
}
uj5u.com熱心網友回復:
只需在邏輯上稍作更改。在 dartpad 上嘗試:https ://dartpad.dev/?id
void main() {
print (intToRoman(30)); // result: XXX
}
String intToRoman(int num) {
List<int> numbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
List<String> romans = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
String roman = '';
for (int i = 0; i < numbers.length; i ) {
while (num >= numbers[i]) {
roman = romans[i];
num -= numbers[i];
}
}
return roman;
}
uj5u.com熱心網友回復:
此解決方案基于Wiki:
class Solution {
/// digit: 3=Thousands(103), 2=Hundreds(102), 1=Tens(10), 0=Units(1)
/// Range for roman numerals: 1...3999
static final romanNumerals = <int,Map<int,String>>{
1 : {3:'M', 2:'C', 1:'X', 0:'I'},
2 : {3:'MM', 2:'CC', 1:'XX', 0:'II'},
3 : {3:'MMM', 2:'CCC', 1:'XXX', 0:'III'},
4 : {2:'CD', 1:'XL', 0:'IV'},
5 : {2:'D', 1:'L', 0:'V'},
6 : {2:'DC', 1:'LX', 0:'VI'},
7 : {2:'DCC', 1:'LXX', 0:'VII'},
8 : {2:'DCCC', 1:'LXXX', 0:'VIII'},
9 : {2:'CM', 1:'XC', 0:'IX'},
};
/* ---------------------------------------------------------------------------- */
Solution();
/* ---------------------------------------------------------------------------- */
String intToRoman(int number) {
if (number < 1 || number >= 4000) return '';
var list = number.toString().split('').map(int.parse).toList();
var buffer = StringBuffer();
final len = list.length;
for (var i = 0; i < len; i ) {
var digit = list[i];
if (digit == 0) continue;
buffer.write(romanNumerals[digit]![len - 1 - i]);
}
return buffer.toString();
}
/* ---------------------------------------------------------------------------- */
void intToRoman2(int number) {
print(intToRoman(number));
}
}
void main(List<String> args) {
Solution()
..intToRoman2(3)
..intToRoman2(58)
..intToRoman2(1994)
;
}
輸出:
III
LVIII
MCMXCIV
這段代碼已經發送到 LeetCode,結果如下:
Runtime: 1130 ms, faster than 27.96% of Dart online submissions for Integer to Roman.
Memory Usage: 150.5 MB, less than 44.09% of Dart online submissions for Integer to Roman.
uj5u.com熱心網友回復:
為什么不使用簡單的方法?
我使用此擴展程式將英文數字轉換為波斯數字
extension StringExtensions on String {
String persianNumber() {
String number = this;
number = number.replaceAll("1", "?");
number = number.replaceAll("2", "?");
number = number.replaceAll("3", "?");
number = number.replaceAll("4", "?");
number = number.replaceAll("5", "?");
number = number.replaceAll("6", "?");
number = number.replaceAll("7", "?");
number = number.replaceAll("8", "?");
number = number.replaceAll("9", "?");
number = number.replaceAll("0", "?");
return number;
}
}
extension IntExtensions on int {
String persianNumber() {
String number = this.toString();
number = number.replaceAll("1", "?");
number = number.replaceAll("2", "?");
number = number.replaceAll("3", "?");
number = number.replaceAll("4", "?");
number = number.replaceAll("5", "?");
number = number.replaceAll("6", "?");
number = number.replaceAll("7", "?");
number = number.replaceAll("8", "?");
number = number.replaceAll("9", "?");
number = number.replaceAll("0", "?");
return number;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/517731.html
標籤:镖