C++程序 检查数字是否为回文数
给定一个整数,编写一个函数,如果给定数字是回文数,则返回true,否则返回false。例如,12321是回文数,但1451不是回文数。
假设给定数字为 num 。这个问题的一个简单方法是首先反转 num 的数字,然后将 num 的反转与 num 进行比较。如果两者相同,则返回true,否则返回false。
下面是一个灵感来自此帖子的方法#2的有趣方法。想法是创建一个 num 的副本并通过引用递归传递副本,并通过值传递 num 。在递归调用中,向下移动递归树时,将 num 除以10。在向上移动递归树时,将复制数除以10。当它们在所有子调用都结束的函数中相遇时, num 的最后一位将是从开头开始的第i位,复制的最后一位将是从末尾开始的第i位。
输出:
时间复杂度: O(log(n))
辅助空间: O(1)。
在不使用任何额外空间的情况下检查数字是否为回文数
方法2:使用string()方法
- 当数字的位数超过 18 时,我们无法将该数字视为整数,因为 long long int 的范围不满足给定的数字。
- 因此将输入作为字符串,从开头到长度的一半运行一个循环并检查字符串的第一个字符(数字)到字符串的最后一个字符,其次是倒数第二个字符,依此类推……如果任何字符不匹配,则该字符串不是回文字符串。
以下是上述方法的实现
输出:
时间复杂度: O(|str|)
空间复杂度: O(1),因为没有使用额外的空间。