# 2166. Design Bitset ###### tags: `Leetcode` `Medium` `Design` Link: https://leetcode.com/problems/design-bitset/description/ ## 思路 ```zeroCnt/oneCnt```表示当前实际bit sequence里面有几个0/1(如果需要flip 就是已经flip过的seq里面到底有多少0/1) ```flip```如果是true那么说明```nums```flip一次才是答案 如果是false说明```nums```本身就是答案 ```fix()``` 我们需要检查```flip```和```nums[idx]``` 如果```flip```是```false``` ```nums[idx]```是```true``` 说明真正在idx的数字就是1 不用做任何事 反之如果```flip```是```true``` ```nums[idx]```是```false``` 说明真正在idx就是1 如果这两种情况都不符合 我们需要给```nums[idx]```重新赋值 并且更新```zeroCnt/oneCnt``` 因为对于真正数字(如果需要```flip``` 就是已经flip过的seq)的操作 是把一个1变成了0 所以```oneCnt```肯定是加1的 ## Code ```java= class Bitset { int size, zeroCnt, oneCnt; boolean flip; boolean[] nums; public Bitset(int size) { this.size = size; zeroCnt = size; oneCnt = 0; flip = false; nums = new boolean[size]; } public void fix(int idx) { if(!flip && nums[idx]==true) return; else if(flip && nums[idx]==false) return; nums[idx] = !flip; oneCnt++; zeroCnt--; } public void unfix(int idx) { if(!flip && nums[idx]==false) return; else if(flip && nums[idx]==true) return; nums[idx] = flip; oneCnt--; zeroCnt++; } public void flip() { flip = !flip; zeroCnt = oneCnt; oneCnt = size-zeroCnt; } public boolean all() { return zeroCnt==0; } public boolean one() { return oneCnt>=1; } public int count() { return oneCnt; } public String toString() { StringBuilder sb = new StringBuilder(); for(int i=0; i<size; i++){ if(!flip) sb.append(nums[i]?'1':'0'); else sb.append(nums[i]?'0':'1'); } return sb.toString(); } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up