1234567891011121314151617181920 |
- func findIntegers(num int) int {
- f := make([]int, 31)
- f[0], f[1] = 1, 2
- for i := 2; i < 31; i++ {
- f[i] = f[i-2] + f[i-1]
- }
- cnt, pre := 0, 1
- for k := 30; 0 <= k; k-- { // The highest bit is the sign of int32.
- if (num>>uint(k))&1 == 1 {
- cnt += f[k]
- if pre == 1 {
- return cnt
- }
- pre = 1
- } else {
- pre = 0
- }
- }
- return cnt + 1 // Means num itself is also valid.
- }
|