1. 易混淆数 给定一个数字 N,当它满足以下条件的时候返回 true: 把原数字旋转 180° 以后得到新的数字。 如 0, 1, 6, 8, 9 旋转 180° 以后,得到了新的数字 0, 1, 9, 8, 6 。 2, 3, 4, 5, 7 旋转 180° 后,得到的不是数字。 易混淆数字 (confusing number) 就是一个数字旋转 180° 以后,得到和原来不同的数字,且新数字的每一位都是有效的。 这道题非常有意思,但是如何实现呢?

依题意可知,若 Srting 中含有 2,3,4,5,7 得到的并不是数字,既然不是数字,那么我们可以直接 return false,依照上面的思路,便有以下代码。

func test(s int) bool {
target:=strconv.Itoa(s)   //将s转换为string类型
nums1:=[]byte(target)     //再次转换为byte,方便后面转换成string与原字符串对比
newline :=[]byte{}
nums:=[]byte{}
for _,v:=range nums1 {
    if v=='2'||v=='3'||v=='4'||v=='5'||v=='7'{ //对字符串进行遍历,查看是否存在无法混淆的元素
        return false
    }else {
        switch v {    //对可混淆的数进行转化
        case '0':newline =append(newline,'0')
        case '1':newline =append(newline,'1')
        case '6':newline =append(newline,'9')
        case '9':newline =append(newline,'6')
        case '8':newline =append(newline,'8')
        }
    }
}
for i:=len(newline)-1;i>=0;i-- {
    nums=append(nums,newline[i])  //对处理后的byte切片进行反转
}
if string(nums1) == string(nums) { //与原字符串进行比较
    return false
}
return true
}

当然此算法存在一定的局限性,欢迎各位在评论区提出更好的算法,近期会将 2019 的所有题目的思路进行梳理,感谢支持