【Leetcode-13.罗马数字转整数 -14.最长公共前缀】

简介: 【Leetcode-13.罗马数字转整数 -14.最长公共前缀】

Leetcode-13.罗马数字转整数

题目:

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
      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。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

下面看代码和注释:

int romanToInt(char* s) 
      {
          int symbolValues[100];
          symbolValues['I'] = 1;
          symbolValues['V'] = 5;
          symbolValues['X'] = 10;
          symbolValues['L'] = 50;
          symbolValues['C'] = 100;
          symbolValues['D'] = 500;
          symbolValues['M'] = 1000;
          int ans = 0;
          int n = strlen(s);
          for (int i = 0; i < n; ++i)
          {
              int value = symbolValues[s[i]];
              //判断IV和IX等特殊情况,因为这些情况都是V-I和X-I,
              //那么我们就判断,如果当前位的值小于下一位的值,我们就将当前位赋负号,也就是ans减去这个值
              //这里还要保证i当前的位置不能是最后一位,如果是最后一位就直接加进ans了
              if (i < n - 1 && value < symbolValues[s[i + 1]])
              {
                  ans -= value;
              }
              else
              {
                  ans += value;
              }
          }
          return ans;
      }
      int main()
      {
          char* ch = "VII";
          printf("%d\n",romanToInt(ch));
          return 0;
      }

Leetcode-14.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 " ".

我们的思路是一个字符一个字符的比较,当遇到不相等时直接把当前比较的字符改成’\0’,返回这个字符串;下面看代码和注释:

char* longestCommonPrefix(char** strs, int strsSize)
      {
          int i = 0;
          //把strs[0][0],相当于(*strs+0)+0,放在pos,即第一个字符串的第一个元素f放到pos中
          char pos = strs[0][0];
          //当第一个strs[0][i]不为0,即第一个字符串没结束就继续
          while (strs[0][i])
          {
              //标记
              int flag = 0;
              //j遍历strs中除了第一个字符串的其他字符串,i表示比较这个字符串的第i个字符
              for (int j = 1; j < strsSize; j++)
              {
                  //当其中有一个不相等,flag赋1,跳到下面的else中
                  if (strs[j][i] != pos)
                  {
                      flag = 1;
                  }
              }
              //当前strsSize个字符串的前i个都相等,i继续往后走,把下一个字符赋给pos,更新pos
              if (flag == 0)
              {
                  i++;
                  pos = strs[0][i];
              }
              //flag=1,将当前第一个字符串的第i个改成0,i前面的就是表示最长公共前缀
              //然后跳出循环,直接返回第一个字符串
              else
              {
                  strs[0][i] = '\0';
                  break;
              }
          }
          return strs[0];
      }
目录
相关文章
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
23 0
|
19天前
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
6天前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
15天前
|
存储 算法
leetcode1237. 找出给定方程的正整数解
leetcode1237. 找出给定方程的正整数解
8 0
|
2月前
leetcode2376. 统计特殊整数
leetcode2376. 统计特殊整数
15 1
|
2月前
|
Serverless
leetcode2719. 统计整数数目
leetcode2719. 统计整数数目
14 0
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
22 0
力扣2457 美丽整数最小增量
力扣2457 美丽整数最小增量
|
3月前
|
Java
LeetCode题解-最长公共前缀-Java
最长公共前缀-Java
10 0
|
3月前
|
Java
LeetCode-整数转罗马数字=Java
整数转罗马数字=Java题解
12 0

热门文章

最新文章