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的后一位,继续判断。