回文数
链接:https://leetcode.com/problems/palindrome-number/description/
判断一个整数是否是回文数是leetcode上的一个简单算法题。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例1:
输入:121 输出:true
例2:
输入:-121 输出:false 解释:从右往左读为121-。
例3:
输入:10 输出:false
解这个题的话,一个很自然而简单的想法就是将整数转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。
第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。 但是,如果反转后的数字大于 int.MAX,会发生数值溢出啦!
不过,按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转 int 数字的一半?毕竟如果该数字是回文,其后半部分反转后肯定与原始数字的前半部分相同的呀。
所以直接上代码(原谅我用python写(//∇//))
== x
当然,得益于python自带大数运算的特性(即不存在撞枪int.MAX的情况),在python里直接用第二种方法解也是可以acc的。
invx == rawx
数值合法性检验
链接:https://leetcode.com/problems/valid-number/description/
这个算法题是一个对初学者写到吐,对有基础的人写着玩儿的一道题。题目很简单,就是判断用户的输入(字符串形式)是不是一个合法的数值。这里合法的数值其实就是我们平常所说的数字啦,比如123
,-1.0
,+423
,.4234
,2.345e21
都是合法数值。当然这里还允许用户在合法数值的前后插入若干空格。
这个问题如果直接用if else while
生写的话会写到吐,而且极难debug。但是这个问题一个机智的做法就是直接上确定有限状态自动机(deterministic finite automation, DFA)。
DFA是由
所组成的5元组。这个在编译原理、NLP基础里都有讲,忘了的同学自行补上哦。
所以很自然的这个题目画出的状态机如下图
有了状态机,代码就变得简洁多了。这里贴出python实现(来自leetcode讨论区,小夕在此题悲剧)
嗯,就酱╮(╯▽╰)╭
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
内容反馈