创建一个能够评估二进制字符串(仅包含1s和0s的字符串)并确定给定字符串是否表示可被3整除的数字的正则表达式。
分析 注意到,一个二进制数后面加一个“0”相当于该数乘以2,一个二进制数后面加一个“1”相当于该数乘2加1。
一个数被3整除的余数只可能是0,1,2
首先,每个二进制数第一位必然为“1”。
1的余数为 1,目的将余数变为0,
如果一个数能被3整除那么后面无论加几个0都能被3整除,那么就只需考虑结尾数为1的情况
1 .... 1
只要判断数字后面增加0或者1的余数是否为0就可以
观察到
情况一
10 111...11(可以是无数个1或者没有1) 01
二进制数 对应余数
1001 1210
10101 12210
101101 122210 1 2 5 11 22 45
1011101 1222210 1 2 5 11 23 46 93
情况二
11 000...000 11
二进制数 对应余数
1111 1010
11011 10010
110011 100010
1100011 1000010
特殊情况就是 11 也能被三整除
public static Regex MultipleOf3() {
// Regular expression that matches binary inputs that are multiple of 3
return new Regex("(1((10*1)|(01*0))*10*)|(0*)");
}