access软件编码_access中判断回文的代码


示例 1:
输入: 121
输出: true 示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶:
你能不将整数转为字符串来解决这个问题吗?

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

又见到回文了,不过这一次不是字符串,而是数。这道题目的难度是简单,那么就让我们来解解看吧。

首先构建函数头,输入时一个 int,输出是bool,很简单


public bool IsPalindrome(int x)


然后考虑解法,题目里有讲尽量不将整数转为字符串来解决这个问题,那么既然是简单难度的题目,咱们也就自己给自己提高一些难度(转化为字符串的解法可以参考前面的文章,最长回文子串中对于回文串的判断的代码)。

首先看题目,示例2与 示例 3 中的两种情况我们可以直接排除这些数字来节约运算时间


if (x < 0)   //负数
{
    return false;
}
if (x % 10 == 0) //个位为0
{
    return false;
}


然后我们考虑在数值类型的情况下如何判断回文数。

首先我们考虑如何将数字进行反转,这就想到了我们之前做过的整数反转那道题,通过逐次除10取余的方式取出最低位的数值。并且考虑到回文数的情况,只要处理到一半(一旦新建的逐步升位数字大于降位数字,即可停止计算,返回false)。我们可以将代码构建如下


public bool IsPalindrome(int x)
{
    if (x == 0) //为0 由于0的情况无法在后续循环中判断,故在此提前判断
    {
        return true;
    }
    if (x < 0)   //负数
    {
        return false;
    }
    if (x % 10 == 0) //个位为0
    {
        return false;
    }

    int temp = 0;
    while (x > 0) 
    {
        if (temp == x) //类似1221这类回文情况在此处判断
        {
            return true;
        }

        int rem = x % 10;
        x = x / 10;

        if (temp == x) //类似121这类回文情况在此处判断
        {
            return true;
        }
        temp = temp * 10 + rem;//更新temp
    }
    return false;
}


非常简单的代码,运行一下


执行用时 :72 ms, 在所有 C# 提交中击败了92.07%的用户

内存消耗 :15.2 MB, 在所有 C# 提交中击败了81.40%的用户