console
function lamps(a) {
// 第一个字符是 1 的原字符串
a[0] = a[0] == 0 ? 0 : 1;
let count1 = _handle(a.join('').split(''));
// 第一个字符是 0 的原字符串,并默认加 1 次
a[0] = a[0] == 0 ? 1 : 0;
let count2 = _handle(a.join('').split(''))+1;
// 比较以 1 和以 0 开头的次数
return count1 > count2 ? count2 : count1;
// 字符串调整函数
function _handle(arr) {
let count = 0;
// 输出
document.getElementById('div').innerHTML += '<p>开头是 '+arr[0]+' 的原字符串:'+arr.join('')+'</p><p>***开始***</p>';
while(true) {
// 循环从头判断是否有 00 或 11
if (arr.join('').match(/0(?=0)|1(?=1)/)) {
let temp = arr.join('').match(/0(?=0)|1(?=1)/)[0];
let index = arr.join('').match(/0(?=0)|1(?=1)/)['index'];
// 是 00 就换成 01,是 11 就换成 10
temp == 0 ? arr[index+1] = 1 : arr[index+1] = 0;
// 输出
document.getElementById('div').innerHTML += '<p>'+arr.join('')+'</p>';
// 每次调整就加一次
count++;
} else {
// 输出
document.getElementById('div').innerHTML += '<p>***结束***</p><p>开头是 1 的新字符串:'+arr.join('')+'</p>';
break;
}
}
// 输出
document.getElementById('div').innerHTML += '<p>'+'进行次数:'+count+' 次'+'</p><br/>';
return --count;
}
}
lamps([1,1,0,1,1,0,0,0,0,1,0]);
// document.getElementById('div').innerHTML += '所以最少次数是:'+lamps([1,1,0,1,1,0,0,0,0,1,0]) + ' 次';
<!-- 题目:https://www.codewars.com/kata/simple-fun-number-124-lamps/train/javascript -->
<div id="div"></div>
p {
margin: 0;
padding: 0;
}