题目简介:
房间中有 n 个灯泡,编号从 0 到 n-1 ,自左向右排成一行。最开始的时候,所有的灯泡都是 关 着的。
请你设法使得灯泡的开关状态和 target 描述的状态一致,其中 target[i] 等于 1 第 i 个灯泡是开着的,等于 0 意味着第 i 个灯是关着的。
有一个开关可以用于翻转灯泡的状态,翻转操作定义如下:
- 选择当前配置下的任意一个灯泡(下标为
i) - 翻转下标从
i到n-1的每个灯泡
翻转时,如果灯泡的状态为 0 就变为 1,为 1 就变为 0 。
返回达成 target 描述的状态所需的 最少 翻转次数。
示例 1:
1 | 输入:target = "10111" |
示例 2:
1 | 输入:target = "101" |
示例 3:
1 | 输入:target = "00000" |
示例 4:
1 | 输入:target = "001011101" |
提示:
1 <= target.length <= 10^5target[i] == '0'或者target[i] == '1'
思路:
本来想着是用从前往后的dp做的,看着看着发现这就是个脑筋急转弯题啊。
由于初始状态均为0,所以sum = (target[0] == '0') ? 0 : 1进行初始化。
然后每当target[i] != target[i - 1]时,sum++即可。
代码如下:
1 | class Solution { |