算法创作|奇妙的回文整数
问题描述判断回文整数:给你一个整数x,如果x是一个回文整数,返回true ;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。来源:力扣(LeetCode)解决方案首先,根据题目可得:回文整数即正着读和反着读结果都是一样的整数。那么根据回文整数的概念可知,负数肯定不是回文整数,如:-123,正着读为-123,而反着读为321-;所以代码首先应该判断输入的整数是正数还是负数,如果是负数,则直接返回False,反之则进行下一步操作。也许有的朋友会有疑问,如果整数是除零这个数字以外的末尾为零的数的话,那也不是回文整数,因为除了零以外,不可能有以零开头的整数。没错,的确除零本身以外,其他的以零结尾的整数都不是回文整数,但在以下算法中完全可以忽略这个判断。当输入的整数为正数时,首先从形式上看,回文整数正着看和反着看,形式一模一样;于是我们可以采取字符串截取比对的方式进行判断,代码如下:def math():x = int(input(''))str_x = str(x)lis_str_x = list(str_x)length = len(lis_str_x)if length % 2 == 0:a = int(length/2)lis_1 = lis_str_x[:a]lis_2 = lis_str_x[a:]lis_3 = list(reversed(lis_2))if lis_1 == lis_3:return Trueelse:return Falseelif length % 2 != 0:b = int((length-1)/2)lis_4 = lis_str_x[:b]lis_5 = lis_str_x[b+1:]lis_6 = list(reversed(lis_5))print(lis_4)print(lis_6)if lis_4 == lis_6:return Trueelse:return False#示例一:#输入:123#输出False#示例二:#输入:121#输出:True#示例三:#输入:-123#输出:False#示例四:#输入:120#输出:False上述代码主要运用了切片比对的方法进行判断,代码逻辑思路比较中规中矩,符合大部分初学者思路。本人找到一串同样是运用字符串方法的代码,个人认为思路比较高级,现分享给大家:def isPalindrome(self, x: int) -> bool:s = str(x)return x >= 0 and s == s[::-1]#示例一:#输入:123#输出False#示例二:#输入:121#输出:True#示例三:#输入:-123#输出:False#示例四:#输入:120#输出:False(来源:力扣)除了上述运用字符串比对进行判断的方法之外,还有没有其他的方法呢?答案是有的。除了根据回文整数的形式运用字符串判断之外,根据回文整数的数字性质也可以进行判断。首先我们可以思考一下,一个数字是由个、十、百、千、万等单位组成;那么运用数学当中的算法,一个数字除了以整数方式表示,还可以使用科学计数法表示。如123可以表示为1.23*10**2,进一步拆解可表示为1*10**2+2*10**1+3*10**0,于是根据此算法,判断回文整数,可写出如下代码:def math():x = int(input(''))if x < 0:return Falseelif x >= 0:number_1 = str(x)numbers = 0for i in range(len(number_1)):numbers = numbers + int(number_1[i])*10**iif numbers == x:return Trueelif numbers != x:return False#示例一:#输入:123#输出False#示例二:#输入:121#输出:True#示例三:#输入:-123#输出:False#示例四:#输入:120#输出:False此代码根据回文整数数字单位的组成特点进行判断,相较于第一种算法可以减少代码数量。结语上述三种算法都能判断回文整数,但在实际测试(采用完全相同的测试用例)中,各有不同的特点。根据算法评价的标准:正确性、健壮性、复杂度(时间复杂度、空间复杂度)等进行判断,可得出:第一种算法和第三种算法内存消耗相同,第一种算法耗时更短;但耗时最短的是第二种算法,同时也是内存消耗最少的。第三种算法代码数量少于第一种算法,内存消耗却与第一种相同,可见代码数量并不是内存消耗的决定因素。三种算法运行中没有bug出现,健壮性可暂时得出无差异。同时三种算法得出的结果相同,所以正确性一致。综上所述,第二种算法相较于其余两种算法,为更优的算法。但并不代表为最优算法,仍然有可能出现更加优秀的算法。所以留给我们的启示:没有最好的算法,只有适合的、更好的算法。实习编辑:王晓姣稿件来源:深度学习与文旅应用实验室(DLETA)