数学相关算法
将整数反转
// 示例 1: // // 输入: 123 // 输出: 321 func reverse(x int) int { y := 0 for ;x != 0; x /= 10 { y = y*10 + x%10 if y < -(1 << 31) || y > 1 << 31 { return 0 } } return y }
两树相加
// 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) // 输出:7 -> 0 -> 8 // 原因:342 + 465 = 807 func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { if l1 == nil && l2 == nil { return nil } sum1, sum2 := 0, 0 for i := 1; l1.Next != nil; i *= 10 { if i == 1 { i = 0 } sum1 = l1.Val + i } for i := 1; l2.Next != nil; i*=10 { if i == 1 { i = 0 } sum2 = l2.Val + i*10 } sum := sum1 + sum2 head := &ListNode{0, nil} cur := head for ; sum > 0; sum /= 10 { val = sum % 10 cur = &ListNode{val, nil} cur = cur.Next } return head }
或者: func addTwoNums(l1, l2 *listnode) *listnode { list := &listnode{} cur := list value, n := 0, 0 for l1 != nil && l2 != nil { value, n = (l1.val+l2.val+n)%10, (l1.val+l2.val+n)/10 cur.next = &listnode{value, nil} cur = cur.next l1 = l1.next l2 = l2.next } if l1 == nil && l2 != nil { value, n = (l2.val+n)%10, (l2.val+n)/10 cur.next = &listnode{value, nil} cur = cur.next l2 = l2.next } if l2 == nil && l1 != nil { value, n = (l1.val+n)%10, (l1.val+n)/10 cur.next = &listnode{value, nil} cur = cur.next l1 = l1.next } return list.next }
// 【LeetCode-随机数】用 Rand7() 实现 Rand10() func rand10() int { a, b := rand7(), rand7() for a > 6{ a = rand7() } for b > 5 { b = rand7() } if a & 0x1 == 1 { //a有50%的概率是奇数(1,3,5) return b } return 5 + b }
// 优化后 func rand10() int { a := rand7()*6+rand7() // 区间 [1,49] for a > 40 { a = rand7()*6+rand7() // 区间 [1,40] } return a % 10 + 1 // a%10取余后为[1,9] }
// 反过来rand5 实现rand3
func rand3() int {
a := rand5()
for a > 3 {
a = rand5()
}
return a
}
// 万能公式 randx 实现 rand7: func randy() int { a := randx()(x-1) + randx for a > int(a/y)*y { a = randx()(x-1) + randx } return a%y + 1 }
// 随机算法:从m个数中等概率取出n个数,要求算法复杂度为o(n) // 每次随机取出一个数,之后将该数放置到数组的末尾去,这样下次取随机数的时候,只从1到目标集合个数-1个中随机抽取 func randnum(a []int, k int) []int { var result []int length := len(a) for ; k > 0; k-- { key := rand.Intn(length) result = append(result, a[key]) length-- a[key], a[length] = a[length], a[key] } return result }

浙公网安备 33010602011771号