「小算法」回文数与数值合法性检验

喵喵喵,小夕最近准备复习一下数学和基础算法,尽量每篇推送下面会附带点数学和基础算法的小文章。说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「小算法」里的小标题之间可能并无逻辑关联。

回文数

链接:https://leetcode.com/problems/palindrome-number/description/

判断一个整数是否是回文数是leetcode上的一个简单算法题。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例1:

输入:121
输出:true

例2:

输入:-121
输出:false
解释:从右往左读为121-。

例3:

输入:10
输出:false

解这个题的话,一个很自然而简单的想法就是将整数转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。

第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。 但是,如果反转后的数字大于 int.MAX,会发生数值溢出啦!

不过,按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转 int 数字的一半?毕竟如果该数字是回文,其后半部分反转后肯定与原始数字的前半部分相同的呀。

所以直接上代码(原谅我用python写\(//∇//)\)

class Solution(object):def isPalindrome(self, x):""":type x: int:rtype: bool"""if x < 0 or (x != 0 and x % 10 == 0):return Falseinvx = 0while invx < x:invx = invx * 10 + x % 10x //= 10return invx == x or invx // 10 == x

当然,得益于python自带大数运算的特性(即不存在撞枪int.MAX的情况),在python里直接用第二种方法解也是可以acc的。

class Solution(object):def isPalindrome(self, x):""":type x: int:rtype: bool"""if x < 0:return Falserawx = xinvx = 0while x > 0:invx = invx * 10 + x % 10x //= 10return 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是由

  1. 一个非空有限的状态集合Q

  2. 一个输入字母表(非空有限的字符集合)

  3. 一组转移函数(如)

  4. 一个开始状态

  5. 一个接受(终止)状态的集合

所组成的5元组。这个在编译原理、NLP基础里都有讲,忘了的同学自行补上哦。

所以很自然的这个题目画出的状态机如下图

有了状态机,代码就变得简洁多了。这里贴出python实现(来自leetcode讨论区,小夕在此题悲剧)

class Solution(object):def isNumber(self, s):""":type s: str:rtype: bool"""#define a DFAstate = [{}, {'blank': 1, 'sign': 2, 'digit':3, '.':4}, {'digit':3, '.':4},{'digit':3, '.':5, 'e':6, 'blank':9},{'digit':5},{'digit':5, 'e':6, 'blank':9},{'sign':7, 'digit':8},{'digit':8},{'digit':8, 'blank':9},{'blank':9}]currentState = 1for c in s:if c >= '0' and c <= '9':c = 'digit'if c == ' ':c = 'blank'if c in ['+', '-']:c = 'sign'if c not in state[currentState].keys():return FalsecurrentState = state[currentState][c]if currentState not in [3,5,8,9]:return Falsereturn True


嗯,就酱╮(╯▽╰)╭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TensorFlow】实现、训练并评估简单的回归模型和分类模型

1 回归模型 回归算法模型用来预测连续数值型&#xff0c;其目标不是分类值而是数字。为了评估这些回归预测值是否与实际目标相符&#xff0c;我们需要度量两者间的距离&#xff0c;打印训练过程中的损失&#xff0c;最终评估模型损失。 这里使用的例子是从均值为1、标准差为0…

关于”算法工程师/机器学习工程师”的笔试和面试总结

从16年九月份开始&#xff0c;参加了一些公司的算法工程师/机器学习工程师岗位的校园招聘&#xff0c;做一些总结&#xff0c;希望可以给大家准备这个职位提供些信息。 一、需要的基本技能 数据结构知识掌握一门编程语言&#xff0c;c/c/Java/Python 机器学习常用算法或者某一…

史上最通熟易懂的检索式聊天机器人讲解

喵喵喵&#xff0c;一不小心又匿了三个月&#xff0c;突然诈尸害不害怕(&#xffe3;∇&#xffe3;) 小夕从7月份开始收到第一场面试邀请&#xff0c;到9月初基本结束了校招&#xff08;面够了面够了T_T&#xff09;&#xff0c;深深的意识到今年的对话系统/chatbot方向是真的…

【LeetCode】3月16日打卡-Day1

题1 字符串压缩 描述 字符串压缩。利用字符重复出现的次数&#xff0c;编写一种方法&#xff0c;实现基本的字符串压缩功能。比如&#xff0c;字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短&#xff0c;则返回原先的字符串。你可以假设字符串中只包含大小写…

Python pandas数据分析中常用方法

官方教程 读取写入文件 官方IO 读取 写入 read_csv       to_csv read_excel      to_excel read_hdf       to_hdf read_sql       to_sql read_json      to_json read_msgpack (experimental)   to_msgpack (experimental) read_html    …

【LeetCode】3月17日打卡-Day2

题1 拼写单词 描述 给你一份『词汇表』&#xff08;字符串数组&#xff09; words 和一张『字母表』&#xff08;字符串&#xff09; chars。 假如你可以用 chars 中的『字母』&#xff08;字符&#xff09;拼写出 words 中的某个『单词』&#xff08;字符串&#xff09;&…

小哥哥,检索式chatbot了解一下?

喵喵喵&#xff0c;一不小心又匿了三个月&#xff0c;突然诈尸害不害怕(&#xffe3;∇&#xffe3;) 小夕从7月份开始收到第一场面试邀请&#xff0c;到9月初基本结束了校招&#xff08;面够了面够了T_T&#xff09;&#xff0c;深深的意识到今年的对话系统/chatbot方向是真的…

多重共线性、异方差和自相关性

https://www.jianshu.com/p/1e5389ca9829

【LeetCode】3月18日打卡-Day3

题1 无重复字符的最长子串 描述 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复…

别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(2020.4.14更新)...

推完上一篇文章&#xff0c;订阅号和知乎后台有好多小伙伴跟小夕要面经&#xff08;还有个要买简历的是什么鬼&#xff09;&#xff0c;然鹅小夕真的没有整理面经呀&#xff0c;真的木有时间(&#xff61; ́︿ ̀&#xff61;)。不过话说回来&#xff0c;面经有多大用呢&#…

机器学习算法优缺点改进总结

https://wenku.baidu.com/view/5df50157f121dd36a22d82bf.html

领域应用 | 中医临床术语系统

本文转载自公众号中医药知识组织与标准。什么是中医药术语系统&#xff1f;它是干什么用的呢&#xff1f;中医药术语系统是运用计算机与信息技术等工具&#xff0c;对中医药学各领域中的事物、现象、特性、关系和过程进行标记和概括&#xff0c;并为每个概念赋予指称形成概念体…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Image图片组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Image图片组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Image组件 Image 用来加载并显示图片的基础组件&#xff0c;它支持从内存、本…

【LeetCode】3月19日打卡-Day4

题1 最长回文串 描述 给定一个包含大写字母和小写字母的字符串&#xff0c;找到通过这些字母构造成的最长的回文串。 在构造过程中&#xff0c;请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输…

别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(19.11.21更新)

推完上一篇文章&#xff0c;订阅号和知乎后台有好多小伙伴跟小夕要面经&#xff08;还有个要买简历的是什么鬼&#xff09;&#xff0c;然鹅小夕真的没有整理面经呀&#xff0c;真的木有时间(&#xff61; ́︿ ̀&#xff61;)。不过话说回来&#xff0c;面经有多大用呢&#…

git - 简易指南

http://www.bootcss.com/p/git-guide/

梁家卿 | 百科知识图谱同步更新

本文转载自公众号知识工场。 本文整理自复旦大学知识工场梁家卿博士在IJCAI 2017 会议上的论文报告&#xff0c;题目为《How to Keep a Knowledge Base Synchronized with Its Encyclopedia Source》&#xff0c;作者包括&#xff1a;梁家卿博士&#xff08;复旦大学&#xff0…

【LeetCode】3月20日打卡-Day5

题1 最小的k个数 描述 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] 或者 [2,1] 示…

别再搜集面经啦!小夕教你斩下NLP算法岗offer!

推完上一篇文章&#xff0c;订阅号和知乎后台有好多小伙伴跟小夕要面经&#xff08;还有个要买简历的是什么鬼&#xff09;&#xff0c;然鹅小夕真的没有整理面经呀&#xff0c;真的木有时间(&#xff61; ́︿ ̀&#xff61;)。不过话说回来&#xff0c;面经有多大用呢&#…

程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)

这个问题可以分为三种情况来考虑&#xff1a;情况一&#xff1a;root未知&#xff0c;但是每个节点都有parent指针 此时可以分别从两个节点开始&#xff0c;沿着parent指针走向根节点&#xff0c;得到两个链表&#xff0c;然后求两个链表的第一个公共节点&#xff0c;这个方法很…