600.non-negative-integers-without-consecutive-ones.go 390 B

1234567891011121314151617181920
  1. func findIntegers(num int) int {
  2. f := make([]int, 31)
  3. f[0], f[1] = 1, 2
  4. for i := 2; i < 31; i++ {
  5. f[i] = f[i-2] + f[i-1]
  6. }
  7. cnt, pre := 0, 1
  8. for k := 30; 0 <= k; k-- { // The highest bit is the sign of int32.
  9. if (num>>uint(k))&1 == 1 {
  10. cnt += f[k]
  11. if pre == 1 {
  12. return cnt
  13. }
  14. pre = 1
  15. } else {
  16. pre = 0
  17. }
  18. }
  19. return cnt + 1 // Means num itself is also valid.
  20. }