数字的位操作
7
先转成字符串,然后判断首位是否是负数,然后翻转转回数字
func reverse(x int) int {
sx := strconv.Itoa(x)
var res string
if sx[0] == '-' {
res = "-"
sx = sx[1:]
}
for i := len(sx) - 1; i >= 0; i-- {
res += string(sx[i])
}
resInt, _ := strconv.Atoi(res)
if resInt > 2147483647 || resInt < -2147483648 {
return 0
}
return resInt
}
9
先把倒序放入新字符串,然后直接对比字符串是否相等即可
func isPalindrome(x int) bool {
strx := strconv.Itoa(x)
var temparr string
for i := len(strx) - 1; i >= 0; i-- {
temparr += string(strx[i])
}
if temparr == strx {
return true
}
return false
}
479
面向结果的编程
func largestPalindrome(n int) int {
switch n {
case 1:
return 9
case 2:
return 987
case 3:
return 123
case 4:
return 597
case 5:
return 677
case 6:
return 1218
case 7:
return 877
case 8:
return 475
}
return 0
}
231
弄个数组把所有2的n次幂村里面,然后直接进行一个判断n是否在数组里面就完了
func isPowerOfTwo(n int) bool {
var arr []int64
for i := 0; i < 32; i++ {
arr = append(arr, int64(1<<i))
}
var n1 int64 = int64(n)
for _, v := range arr {
if n1 == v {
return true
}
}
return false
}
342
数学题
func isPowerOfFour(n int) bool {
if n == 0 {
return false
}
for n%4 == 0 {
n /= 4
}
return n == 1
}
326
func isPowerOfThree(n int) bool {
if n <= 0 {
return false
}
for n%3 == 0 {
n /= 3
}
return n == 1
}
504
没啥好说的,注意一下除完后负号会跑到最后,转换一下除一下就行了
func convertToBase7(num int) string {
if num == 0 {
return "0"
}
var ans string
if num < 0 {
ans = "-"
num = -num
}
for num > 0 {
ans = fmt.Sprintf("%s%d", ans, num%7)
num /= 7
}
var newans string
ans = reverse(ans)
if ans[len(ans)-1] == '-' {
for i := 0; i < len(ans)-1; i++ {
newans += string(ans[i])
}
return "-" + newans
}
return ans
}
func reverse(s string) string {
var ans string
for i := len(s) - 1; i >= 0; i-- {
ans = fmt.Sprintf("%s%c", ans, s[i])
}
return ans
}
263
func isUgly(n int) bool {
if n <= 0 {
return false
}
for n%2 == 0 {
n /= 2
}
for n%3 == 0 {
n /= 3
}
for n%5 == 0 {
n /= 5
}
return n == 1
}
190
狠狠的用字符串进行转换
func reverseBits(num uint32) uint32 {
var temp string
for i := 0; i < 32; i++ {
temp += strconv.Itoa(int(num & 1))
num >>= 1
}
res, _ := strconv.ParseUint(temp, 2, 32)
return uint32(res)
}
191
func hammingWeight(num uint32) int {
var result int
for num != 0 {
result += int(num & 1)
num >>= 1
}
return resu
476
func findComplement(num int) int {
if num == 1 {
return 0
}
var i int
for i = 0; i < 32; i++ {
if num < 1<<i {
break
}
}
return (1<<i - 1) ^ num
}
461
func hammingDistance(x int, y int) int {
var res int
for x > 0 || y > 0 {
if x%2 != y%2 {
res++
}
x /= 2
y /= 2
}
return res
}
477
func totalHammingDistance(nums []int) int {
var res int
for i := 0; i < 32; i++ {
var c int
for _, num := range nums {
c += num >> i & 1
}
res += c * (len(nums) - c)
}
return res
}
693
func hasAlternatingBits(n int) bool {
for n > 0 {
if n&1 == n>>1&1 {
return false
}
n >>= 1
}
return true
}
393
func validUtf8(data []int) bool {
var count int
for _, v := range data {
if count == 0 {
if v>>5 == 0b110 {
count = 1
} else if v>>4 == 0b1110 {
count = 2
} else if v>>3 == 0b11110 {
count = 3
} else if v>>7 != 0 {
return false
}
} else {
if v>>6 != 0b10 {
return false
}
count--
}
}
return count == 0
}
172
func trailingZeroes(n int) int {
var res int
for n > 0 {
n /= 5
res += n
}
return res
}
458
func poorPigs(buckets int, minutesToDie int, minutesToTest int) int {
var pigs int
var MaxRound = minutesToTest/minutesToDie + 1
for math.Pow(float64(MaxRound), float64(pigs)) < float64(buckets) {
pigs++
}
return pigs
}
258
319
func bulbSwitch(n int) int {
return int(math.Sqrt(float64(n)))
}
405
func toHex(num int) string {
if num < 0 {
num = 0xFFFFFFFF + num + 1
}
return fmt.Sprintf("%x", num)
}
171
26进制罢了
func titleToNumber(columnTitle string) int {
var res int
for i := 0; i < len(columnTitle); i++ {
res = res*26 + int(columnTitle[i]-'A'+1)
}
return res
}
168
上题反转
func convertToTitle(columnNumber int) string {
var res string
for columnNumber > 0 {
columnNumber--
res = string(columnNumber%26+'A') + res
columnNumber /= 26
}
return res
}
670
贪心
func maximumSwap(num int) int {
s := strconv.Itoa(num)
str := []byte(s)
l := len(str) - 1
for i := range str {
temp := str[i]
index := i
for j := l; j >= i+1; j-- {
if str[j] > temp {
temp = str[j]
index = j
}
}
if index != i {
str[i], str[index] = str[index], str[i]
break
}
}
n, _ := strconv.Atoi(string(str))
return n
}
233
狠狠的求余1
func countDigitOne(n int) int {
var res int
for i := 1; i <= n; i *= 10 {
a, b := n/i, n%i
res += (a + 8) / 10 * i
if a%10 == 1 {
res += b + 1
}
}
return res
}
357
func countNumbersWithUniqueDigits(n int) int {
if n == 0 {
return 1
}
if n == 1 {
return 10
}
ans, cur := 10, 9
for i := 0; i < n-1; i++ {
cur *= 9 - i
ans += cur
}
return ans
}
400
弱智题
func findNthDigit(n int) int {
digit, start, count := 1, 1, 9
for n > count {
n -= count
digit += 1
start *= 10
count = 9 * start * digit
}
num := start + (n-1)/digit
return int(strconv.Itoa(num)[(n-1)%digit] - '0')
}
简单数学题
492
func constructRectangle(area int) []int {
var result []int
w := int(math.Sqrt(float64(area)))
for w > 0 {
if area%w == 0 {
result = append(result, area/w)
result = append(result, w)
break
}
w--
}
return result
}
507
func checkPerfectNumber(num int) bool {
if num == 1 {
return false
}
sum := 1
for i := 2; i*i <= num; i++ {
if num%i == 0 {
sum += i + num/i
}
}
return sum == num
}
快速幂
50
func myPow(x float64, n int) float64 {
if n == 0 {
return 1
}
if n < 0 {
return 1 / myPow(x, -n)
}
if n%2 == 0 {
return myPow(x*x, n/2)
}
return x * myPow(x*x, n/2)
}
372
func superPow(a int, b []int) int {
var res int = 1
for _, v := range b {
res = pow(res, 10) * pow(a, v) % 1337
}
return res
}
func pow(x, n int) int {
res := 1
for ; n > 0; n /= 2 {
if n&1 > 0 {
res = res * x % 1337
}
x = x * x % 1337
}
return res
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容