【发布时间】:2020-04-23 11:20:35
【问题描述】:
我很困惑,当索引是字符时,怎么可能有一个整数数组? 另一个困惑是这一行
if(i + 1 < N && nums[s[i+1]] > nums[s[i]])
字符串是否被转换为整数,然后映射到 nums 数组,类似于将其散列到索引?`
int romanToInt(string s) {
const int N = s.length();
int nums[128];
nums['I'] = 1;
nums['V'] = 5;
nums['X'] = 10;
nums['L'] = 50;
nums['C'] = 100;
nums['D'] = 500;
nums['M'] = 1000;
int result = 0;
for(int i = 0; i < N; ++i)
{
if(i + 1 < N && nums[s[i+1]] > nums[s[i]])
result -= nums[s[i]];
else
result += nums[s[i]];
}
return result;
}
【问题讨论】:
-
字符文字可以转换为整数。顺便说一句,所有内容都以数字形式存储在计算机中。
-
顺便说一下,您的代码有未定义的行为,因为您使用了
nums的未初始化元素。未初始化的变量(或数组元素)将具有 indeterminate (并且看似随机/垃圾)值,并且使用这些值会导致所述未定义行为。 -
"是要转换的字符串":注意这里的索引不是字符串。它是一个(单个)字符。它不适用于字符串作为索引。没有任何涉及的散列。
-
@sanjep
s是一个字符串,所以s[i+1]是一个字符,而不是一个字符串。 -
@Someprogrammerdude 他真的使用未初始化的元素吗?我对此表示怀疑,除非输入字符串包含 IVXLCDM 以外的内容。但在这种情况下,您还应该警告他基本 ASCII 以外的字符低于 0 或高于 127,具体取决于是否对普通字符进行了签名。