龙空技术网

VB编程入门练习:力扣算法第9题(回文数)的一种简单解法

Access数据库讲师宇哥 138

前言:

目前小伙伴们对“vb递归算法经典实例”可能比较关切,小伙伴们都需要知道一些“vb递归算法经典实例”的相关资讯。那么小编也在网络上搜集了一些有关“vb递归算法经典实例””的相关文章,希望朋友们能喜欢,朋友们快快来学习一下吧!

本文讲解力扣算法(LeetCode)第9题(回文数操作),用VB语言的解法教程。通过本文的练习,老铁们可以更加深入的掌握VB递归循环的思路,熟悉并掌握While循环的用法。

我们先看一下题目:

题目描述

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121输出:true

示例 2:

输入:x = -121输出:false解释:从左向右读, 为 -121 。从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。

学完本课用VB语言做出来的效果 (基于Access数据库)

力扣官方给的这道题的题解非常精妙、逻辑也很完备,但是理解起来还是有一定的困难(起码我是这样),于是我给了一套自己的简单方法,主要思路是运用While Wend循环。

官方题解相对比较复杂,因为考虑了负数和尾号为0的情况,我给的答案简单一些,适合新手。按照惯例,本教程分为三大部分:

完整代码原理演示代码解释

1

完整代码

力扣算法第9题(回文数)简单方法的完整VB代码(基于Access数据库)如下,在实际应用时要学会调用。

Option Compare Database'力扣算法第9题,官方解题过程比较缜密'我这个方法比较简单一些,适合初学者Function reverse(x As Double)    reverse = 0 '起始值为0    While (x > 0) '输入数字大于0时,继续循环            reverse = reverse * 10 + x Mod 10        'x Mod 10是取余函数,68 mod 10 = 8        '68除以10,60能除动,8除不动        '8 mod 10 = 8                x = x \ 10        '符号\代表除完之后取整,68 \ 10 = 6        '6 \ 10 = 0    Wend '继续循环,直到x \ 10值为0End Function

我可以把官方题解的思路(我已经改装成VB语言,可以直接模块调用)给大家,大家对比一下各自的优劣。本节课讲简单版本的解题思路。

Function revertedNumberJudge(x As Double) As StringDim revertedNumber As Long​    If x < 0 Then        revertedNumberJudge = "该数不是回文数!"    Else​        revertedNumber = 0                While x > revertedNumber            revertedNumber = revertedNumber * 10 _            + x Mod 10            x = x \ 10        Wend​        If x = Int(revertedNumber) Or _            x = Int(revertedNumber \ 10) Then            revertedNumberJudge = "该数是回文数!"        Else            revertedNumberJudge = "该数不是回文数!"        End If            End IfEnd Function

2

原理演示

力扣算法第9题(回文数)我给的解题思路,是通过While Wend循环,给定一个输入的数字x,不停的取这个数字的最后一位,把这位数字乘以10再加上下一次的最后一位,直到所有位数全部取完,数字就倒转过来了。

VB编程计算回文数的原理演示

本案例取x值为“12345”,reverse(数字倒转回来的值)初始值为0,这可以视为第0次循环。

第1次循环,

reverse值=reverse*10 + x Mod 10,由于reverse的初始值为0,12345 mod 10(mod取模函数,非常常用)的值为5,因此第1次循环后,reverse的值为5。

计算完reverse值之后,x也要进行去尾处理,x \ 10=12345 \ 10=1234

(注:在VB语言中,“\”表示整除,得到商但不含小数,比如3 \ 5 = 0)。

第2次循环,

reverse值=reverse*10 + x Mod 10,现在reverse的值为5,x的值为1234,那么reverse=5*10 + 1234 Mod 10 = 54。

由于x>0,计算reverse值之后,根据While Wend程序设置,要继续对x=1234进行去尾处理,x \ 10=123。

第3次循环,

reverse值=reverse*10 + x Mod 10=54*10 + 123 Mod 10 = 543。

继续对x=123进行去尾处理,x \ 10=12。

第4次循环,

reverse值=reverse*10 + x Mod 10=543*10 + 12 Mod 10 = 5432。

继续对x=12进行去尾处理,x \ 10=1。

第5次循环,

reverse值=reverse*10 + x Mod 10=5432*10 + 1 Mod 10 = 54321。

继续对x=1进行去尾处理,x \ 10=0。

注意,这时x已经=0,不满足While x>0的条件,因此循环结束。

3

代码解释

力扣算法第9题(回文数)的简单解法,语句比较精炼,思想也比较巧妙,核心是利用现有函数Mod取模、符号“\"整除去尾进行循环计算。

完整代码如下(去掉了代码注释)

Function reverse(x As Double)    reverse = 0        While (x > 0)         reverse = reverse * 10 + x Mod 10           x = x \ 10         Wend End Function

本案例是在模块中进行编程,应用的时候进行临时调用。

Function reverse(x As Double)

reverse(x)就是一个函数y=f(x),x是自变量,reverse相当于因变量。输入x的值,Function就会做相应的计算,reverse就是计算的结果。

x是输入的数字,reverse是数字反转后的数字。

reverse = 0        While (x > 0)         reverse = reverse * 10 + x Mod 10           x = x \ 10         Wend 

这段代码是循环代码,注意从reverse开始循环的,reverse=0是必须有的。

reverse计算在前,x计算在后,顺序不能搞错。

reverse和x都利用了递归的原理,不停的计算并且调用原来的自己(我没理解错吧,是递归?)直到循环条件While(x>0)不成立为止。

reverse*10就是把上一次得到的数字乘以10,再加上x Mod 10得到的尾数,完成了一次数字调转。这是第1次计算,然后89进行去尾操作,x=8。

比如89这个数,第1次循环reverse=0,直接加上89 Mod 10=9,因此第1次循环后reverse=9,x=8。

第2次循环,reverse要先加上第1次循环后的自己,reverse=9*10,再加上x Mod 10 = 8 Mod 10 = 8,reverse=90+8=98。

x这时候再进行去尾操作就等于0了,因为8\10=0。

因为x=0不符合While(x>0)的条件,循环到此戛然而止。

这段代码还是非常短小精悍的,体现了递归的思想和能力,充分利用了把复杂问题分解化、简单化的计算机编程思想。

Access数据库窗体中调用代码如下:

Private Sub Text1_AfterUpdate()​    Text2 = reverse(Val(Nz(Text1)))        If Val(Text2) = Val(Text1) Then            Text3 = "是回文数"        Else    Text3 = "不是回文数"    End If​End Sub

这段调用代码就比较容易理解了,

Text2 = reverse(Val(Nz(Text1)))

直接调用reverse这个我们封装好的模块函数,就能直接计算数字倒转的结果,非常简洁。

		If Val(Text2) = Val(Text1) Then            Text3 = "是回文数"        Else    Text3 = "不是回文数"    End If

这一段是判断是否是回文数的语句,如果输入文本框Text1=输出文本框Text2.那么就是回文数,如果不相等那就不是回文数。

这就是力扣算法第9题的简单版解题方法,当然有更复杂、更简洁、更严谨的方法,也就是官方给的方法,留待下回分解吧。

标签: #vb递归算法经典实例