Day 8

第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。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。来源:力扣(LeetCode)

1、题目给定一个罗马数字,将其转化为整数,首先用switch将对应的罗马数字和所对应的整数相互连接;

  在函数中可以先将罗马数字利用switch转化为整数;

  因为罗马数字当前一位比自身小的时候,这两位组成的数就是自身减去前一位的值;

  所以可以判断自身和前一位的大小关系,如果num>presun,则将presum加到sum中,如果num<presum则将sum减去presum;

  如此循环下去,可得最后结果。(也可以将所有的组合序列添加到switch中,由此就可以判断其中两位是否存在,存在则后移两位,不存在则一位一位的后移)

  

第1437题:

给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素,则返回 True ;否则,返回 False 。(来自LeetCode)

1、其实就是定义两个指针一样的l、r来计算两个1之间的0个数;

  先将l指向第一个1的位置;然后再将r指向下一个1的位置,由两者计算中间的个数;

  在比较k,返回结果。

  

2、也可以直接判断1后面是不是有k个0;如果少于k个,直接false;

  先考虑特殊情况,k为0时,返回true;

  在遍历数组,如果为0,后移,为1,则开始for循环判断后面的k位里是不是有1,有返回false;

  如果k后面都是0,那么就跳到这些0的后一位,继续判断。

  

 

posted @ 2020-06-23 00:30  Liang-Yi  阅读(68)  评论(0编辑  收藏  举报