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

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

回文数

链接: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…

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

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

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    …

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

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

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

本文转载自公众号中医药知识组织与标准。什么是中医药术语系统&#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;它支持从内存、本…

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

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

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

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

肖仰华 | 基于知识图谱的问答系统

本文转载自公众号知识工场。 本文整理自复旦大学知识工场肖仰华教授在VLDB 2017 会议上的论文报告&#xff0c;题目为《KBQA: Learning Question Answering over QA Corpora and Knowledge Bases》&#xff0c;作者包括&#xff1a;崔万云博士&#xff08;现上海财经大学讲师&a…

【小夕精选】YJango 7分钟带你领略你未曾想过的线性代数+微积分

小夕很早之前就想转一些精彩的技术文章&#xff0c;这样哪怕没有时间写作的时候&#xff0c;也能把优质的干货分享给大家&#xff5e;然鹅&#xff0c;由于我也不知道是什么的原因&#xff0c;就不小心拖到了现在╮(&#xffe3;▽&#xffe3;"")╭之前有不少粉丝希…

白硕 | 基于区块链的众包社区激励机制

本文整理自白硕老师在 YOCSEF 武汉专题论坛&#xff1a;“人工智能遇到区块链&#xff0c;是惊鸿一瞥还是天长地久&#xff1f;”的报告。 很高兴有这个机会跟大家交流。我先讲几个案例作为引子。第一个案例与知识图谱有关。这个公司做的是非常垂直的一个领域&#xff0c;安全教…

【小夕精选】多轮对话之对话管理(Dialog Management)

这一篇是一段时间之前小夕初入对话领域时刷到的徐阿衡小姐姐写的一篇文章&#xff0c;写的深入浅出&#xff0c;十分适合有一定基础的情况下想快速了解对话管理技术的童鞋阅读~另外顺手推一下阿衡小姐姐的订阅号「徐阿衡」&#xff0c;干货满满不要错过哦~这一篇想写一写对话管…

KD Tree的原理及Python实现

1. 原理篇我们用大白话讲讲KD-Tree是怎么一回事。1.1 线性查找假设数组A为[0, 6, 3, 8, 7, 4, 11]&#xff0c;有一个元素x&#xff0c;我们要找到数组A中距离x最近的元素&#xff0c;应该如何实现呢&#xff1f;比较直接的想法是用数组A中的每一个元素与x作差&#xff0c;差的…

漆桂林 | 知识图谱的应用

本文作者为东南大学漆桂林老师&#xff0c;首发于知乎专栏知识图谱和智能问答 前面一篇文章“知识图谱之语义网络篇”已经提到了知识图谱的发展历史&#xff0c;回顾一下有以下几点&#xff1a; 1. 知识图谱是一种语义网络&#xff0c;即一个具有图结构的知识库&#xff0c;这里…

NLP预训练之路——从word2vec, ELMo到BERT

前言 还记得不久之前的机器阅读理解领域&#xff0c;微软和阿里在SQuAD上分别以R-Net和SLQA超过人类&#xff0c;百度在MS MARCO上凭借V-Net霸榜并在BLEU上超过人类。这些网络可以说一个比一个复杂&#xff0c;似乎“如何设计出一个更work的task-specific的网络"变成了NLP…

论文 | 信息检索结果Ranking的评价指标《RankDCG: Rank-Ordering Evaluation Measure》

未经允许&#xff0c;不得转载&#xff0c;谢谢~~ 一 文章简介 为什么要提出这个新的评价算法&#xff1f; 我们都知道ranking过程对于信息检索的结果是非常重要的&#xff0c;那么我们就需要有一些算法能评价ranking的结果到底如何。现有用来评价ranking的常用算法有&#xff…

肖仰华 | 基于知识图谱的用户理解

本文转载自公众号知识工场。 本文整理自肖仰华教授在三星电子中国研究院做的报告&#xff0c;题目为《Understanding users with knowldge graphs》。 今天&#xff0c;很高兴有这个机会来这里与大家交流。 前面两位老师把基于社会影响力的传播和推荐&#xff0c;以及跨领域的…

NLP的游戏规则从此改写?从word2vec, ELMo到BERT

前言还记得不久之前的机器阅读理解领域&#xff0c;微软和阿里在SQuAD上分别以R-Net和SLQA超过人类&#xff0c;百度在MS MARCO上凭借V-Net霸榜并在BLEU上超过人类。这些网络可以说一个比一个复杂&#xff0c;似乎“如何设计出一个更work的task-specific的网络"变成了NLP领…

信息检索IR评价中常见的评价指标-MAP\NDCG\ERR\P@10等

信息检索评价是对信息检索系统性能&#xff08;主要满足用户信息需求的能力&#xff09;进行评估的活动。通过评估可以评价不同技术的优劣&#xff0c;不同因素对系统的影响&#xff0c;从而促进本领域研究水平的不断提高。信息检索系统的目标是较少消耗情况下尽快、全面返回准…

科普 | “开放知识”的定义

OpenKG 主要关注知识图谱数据&#xff08;或者称为结构化数据、语义数据、知识库&#xff09;的开放&#xff0c;广义上 OpenKG 属于开放数据的一种。 关于“开放”的定义&#xff0c;比较好的参考是由国际开放知识基金会 OKFN.ORG(Open Knowledge International)给与的“开放知…