| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- type Solution struct {
 
- 	m    map[int]int
 
- 	size int
 
- 	rows int
 
- 	cols int
 
- }
 
- func Constructor(n_rows int, n_cols int) Solution {
 
- 	return Solution{
 
- 		m:    make(map[int]int),
 
- 		size: n_rows * n_cols,
 
- 		rows: n_rows,
 
- 		cols: n_cols,
 
- 	}
 
- }
 
- func (this *Solution) Flip() []int {
 
- 	idx := rand.Intn(this.size)
 
- 	i := idx
 
- 	this.size--
 
- 	if val, ok := this.m[idx]; ok {
 
- 		idx = val
 
- 	} // The trick is very important!
 
- 	if val, ok := this.m[this.size]; ok {
 
- 		this.m[i] = val
 
- 	} else {
 
- 		this.m[i] = this.size
 
- 	}
 
- 	return []int{idx / this.cols, idx % this.cols}
 
- }
 
- func (this *Solution) Reset() {
 
- 	this.m = make(map[int]int)
 
- 	this.size = this.rows * this.cols
 
- }
 
- /**
 
-  * Your Solution object will be instantiated and called as such:
 
-  * obj := Constructor(n_rows, n_cols);
 
-  * param_1 := obj.Flip();
 
-  * obj.Reset();
 
-  */
 
 
  |