One minute
2019LeetCode春季全国高校赛-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 的所有题目的思路进行梳理,感谢支持
110 Words
2019-03-22 00:00