Golang每日一练(leetDay0069) 数字范围按位与、快乐数

简介: Golang每日一练(leetDay0069) 数字范围按位与、快乐数

201. 数字范围按位与 Bitwise-and-of-numbers-range


给你两个整数 leftright ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 leftright 端点)。


示例 1:

输入:left = 5, right = 7

输出:4


示例 2:

输入:left = 0, right = 0

输出:0


示例 3:

输入:left = 1, right = 2147483647

输出:0


提示:

   0 <= left <= right <= 2^31 - 1

代码:

func rangeBitwiseAnd(left int, right int) int {
    res := left
    for i := left + 1; i <= right; i++ {
        res &= i
    }
    return res
}
func rangeBitwiseAnd(left int, right int) int {
    shift := 0
    for left < right {
        left >>= 1
        right >>= 1
        shift++
    }
    return left << shift
}
func rangeBitwiseAnd(left int, right int) int {
    for left < right {
        right &= (right - 1)
    }
    return right
}

输出:


202. 快乐数 Happy Number


编写一个算法来判断一个数 n 是不是快乐数。


「快乐数」 定义为:


   对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

   然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

   如果这个过程 结果为 1,那么这个数就是快乐数。


如果 n 是 快乐数 就返回 true ;不是,则返回 false 。


示例 1:

输入:n = 19

输出:true

解释:

12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1


示例 2:

输入:n = 2

输出:false


提示:

   1 <= n <= 2^31 - 1

代码:

func isHappy(n int) bool {
    for n != 1 && n != 4 {
        sum := 0
        for n > 0 {
            digit := n % 10
            sum += digit * digit
            n /= 10
        }
        n = sum
    }
    return n == 1
}
func isHappy(n int) bool {
    seen := make(map[int]bool)
    for n != 1 && !seen[n] {
        seen[n] = true
        sum := 0
        for n > 0 {
            digit := n % 10
            sum += digit * digit
            n /= 10
        }
        n = sum
    }
    return n == 1
}
func isHappy(n int) bool {
    slow, fast := n, n
    for {
        slow = digitSquareSum(slow)
        fast = digitSquareSum(fast)
        fast = digitSquareSum(fast)
        if slow == fast {
            break
        }
    }
    return slow == 1
}
func digitSquareSum(n int) int {
    sum := 0
    for n > 0 {
        digit := n % 10
        sum += digit * digit
        n /= 10
    }
    return sum
}



输出:




目录
相关文章
|
1月前
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
62 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
1月前
|
Go Linux Shell
Linux 终端命令之文件浏览(2) more
Linux 终端命令之文件浏览(2) more
40 0
Linux 终端命令之文件浏览(2) more
|
1月前
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
32 0
Linux 终端操作命令(2)内部命令
|
1月前
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
44 0
力扣 C++|一题多解之动态规划专题(2)
|
1月前
|
Python 索引
Python Numpy入门基础(一)创建数组
Python Numpy入门基础(一)创建数组
45 0
Python Numpy入门基础(一)创建数组
|
1月前
|
Java 容器 程序员
Java语言程序设计试卷6套
Java语言程序设计试卷6套
373 0
Java语言程序设计试卷6套
|
1月前
|
Java Go C++
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
43 0
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
|
1月前
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
53 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
1月前
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
37 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
1月前
|
Java Go C++
Golang每日一练(leetDay0117) 打家劫舍III、比特位计数
Golang每日一练(leetDay0117) 打家劫舍III、比特位计数
35 0
Golang每日一练(leetDay0117) 打家劫舍III、比特位计数