吹拉弹唱


  • Home
  • Archive
  • Categories
  • Tags
  • Books
  •  

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo

Code - Number

Posted at 2022-05-23Updated at 2022-05-23 interview  interview algorithm 

  • 7. Reverse Integer
  • 8. String to Integer (atoi)
  • 65. Valid Number
  • 191. Number of 1 Bits
  • 190. Reverse Bits
  • 2119. A Number After a Double Reversal

# 7. Reverse Integer

leetcode

We could solve by reversing it as a string. But the problem here is we have to check overflow in a 32-bit environment.

We can either use (0xffffffff - tail)/10 to prevent overflow, or use the reversion to check overflow.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func reverse(x int) int {
var result int32 = 0
for x != 0 {
var tail int32 = int32(x % 10)
var newResult int32 = result * 10 + tail
if (newResult - tail) / 10 != result {
return 0
}
result = newResult
x /= 10
}

return int(result)
}

# 8. String to Integer (atoi)

leetcode

1
2
3
4
5
6
7
8
9
10
11
12
13
func myAtoi(s string) int {
r := regexp.MustCompile(`^[ ]*[-+]?[\d]+`)
s = string(r.Find([]byte(s)))
s = strings.TrimSpace(s)
// fmt.Printf("%v", s)
num, _ := strconv.Atoi(s)
if num > int(math.Pow(2, 31) - 1) {
return int(math.Pow(2, 31) - 1)
} else if num < int(-math.Pow(2, 31)) {
return int(-math.Pow(2, 31))
}
return num
}

# 65. Valid Number

leetcode

Regexp

1
2
3
4
func isNumber(s string) bool {
r := regexp.MustCompile(`^[+-]?((\d+\.?\d*)|(\d*\.?\d+))([eE][+-]?\d+)?$`)
return r.MatchString(s)
}

condition traverse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func isNumber(s string) bool {
s = strings.TrimSpace(s)
pointSeen := false
eSeen := false
numberSeen := false

for i := 0; i < len(s); i++ {
if s[i] <= '9' && s[i] >= '0' {
numberSeen = true
} else if s[i] == '.' {
if eSeen || pointSeen {
return false
}
pointSeen = true
} else if s[i] == 'e' || s[i] == 'E' {
if eSeen || !numberSeen {
return false
}
eSeen = true
numberSeen = false
} else if s[i] == '-' || s[i] == '+' {
if i > 0 && s[i-1] != 'e' {
return false
}
} else {
return false
}
}
return numberSeen
}

# 191. Number of 1 Bits

leetcode

1
2
3
4
5
6
7
8
func hammingWeight(num uint32) int {
var count uint32 = 0
for num !=0{
count += num & 1
num >>= 1
}
return int(count)
}

# 190. Reverse Bits

leetcode

1
2
3
4
5
6
7
8
9
10
func reverseBits(num uint32) uint32 {
var rev uint32 = 0
for i := 0; i < 31; i++ {
rev += num & 1
num >>= 1
rev <<= 1
}
rev += num
return rev
}

# 2119. A Number After a Double Reversal

1
2
3
4
5
6
func isSameAfterReversals(num int) bool {
if num == 0 {
return true
}
return num % 10 != 0
}

Share 

 Previous post: System - YouTube Next post: System Design 

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo