Leetcode golang刷题记录 数与位篇

数字的位操作

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

图片[1]-Leetcode golang刷题记录 数与位篇-魔法少女雪殇

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
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情