这个问题经常在面试中被问到,以测试应聘者思考代码的方法。
问题陈述
你有一个字符串,它只包含0和1。您需要编写一个程序,它将返回0和1的数量,您不允许使用计数器变量的任何方式。
看起来复杂的对吧?
别担心,这很简单。我要教你两种方法:
- 使用计数器(经典方法)
- 不使用计数器(如面试问题所要求)
代码
使用计数器的解法
function count(str) { var countForZero = 0; var countForOne = 0; for (var i = 0, length = str.length; i < length; i++) { if (str[i] === '0') { countForZero++; } else { countForOne++; } } return { 'zero': countForZero, 'One': countForOne };}
上述代码的逻辑是:
- 保留两个变量来计算0和1。
- 循环遍历字符串的字符,当找到0时,递增countForZero。当找到一个1时,递增countfor1。
- 在最后一部分中,我们将返回对象中的count。
现在,让我们看看没有计数器的解法。
function count(str) { var sum = 0; for (var i = 0, length = str.length; i < length; i++) { sum += Number(str[i]); } return { 'zero': str.length - sum, 'One': sum };}
正如您在上面的代码中所看到的,我没有使用任何计数器,而是使用一个名为sum的变量。这里的概念是什么?
这个概念是:
包含0和1的字符串的一个字符的和总是等于1的个数。
例如:0011001:0+0+1+1+0+0+1 = 3 = 1的个数
0的个数=字符串的长度- 1的个数
上述代码的逻辑是:
- 保持sum变量初始值为零。
- 循环遍历字符串中的字符并取所有字符的和。
- 字符串中所有字符的和将是1的个数,0的个数将是(字符串长度- 1的个数)。
- 在最后一部分中,我们将返回对象中的count。
我希望你现在能明白如何用计数器和不用计数器来回答这个问题。
如果你有任何问题,请在评论区提出。如果你还有其他的诀窍,也请告诉我。