算法进修Day-5

算法进修Day-5

9. 回文数

难度:简单
题目要求:
给一个整数x,如果x是一个回文整数,返回true;否则,返回false
回文是指正序和倒序读都是一样的数

示例1

输入:x = 121
输出:true

示例2

输入:x = -121
输出:false
从左往右读位“-121”,从右往左读为“121-”

示例3

输入:x = 10
输出:false
从右往左读为“01”

题解

最开始的想法为对这个数先进行判断,如果这个数是小于0或者末尾为零(不包括0)的数,那么直接返回false,如果为其他的数,就可以正常按照倒序,然后比对是否为回文

想法代码

public static bool IsPalindrome(int x)
    {
        if (x < 0 || (x % 10) == 0 && x !=0)
        {
            return false;
        }
        int num = 0;
        while (x > num)
        {
            num = num * 10 + x % 10;
            x /= 10;
        }
        return x == num || x == num / 10;
    }

10. 正则表达式匹配

难度:困难
题目要求:
给定一个字符串s和一个字符规律p,来实现一个 ’ . ’ 和 ’ * ’ 的正则表达式匹配
’ . ’ 匹配任意单个字符
’ * ’ 匹配零个或多个前面的那一个元素

示例1;

输入:s = “aa”, p = “a”
输出:false
解释:“a” 无法匹配 “aa” 整个字符串

示例2

输入:s = “aa”, p = “a*”
输出:true
因为 ‘ * ’ 代表可以匹配零个或多个前面的那一个元素,在这里前面的元素就是’a’。因此,字符串”aa"可被视为’a’重复了一次

示例3

输入:s = “ab”, p = "."
输出:true
解释:".
"表示可匹配零个或多个(’ * ‘)任意字符(’ . ')

题解

这道题没想到解法,观看了别人的题解之后发现了一个很好的方法
算法进修Day-5_第1张图片
s = “abbbc” , p = “abbc.”
采用自底向上的方法,找到一个可以走的通路(忽略*行)

题解代码

public static bool IsMatch(string s, string p)
    {
        bool[,] dp = new bool[s.Length + 1, p.Length + 1];
        dp[s.Length, p.Length] = true;
        for (int i = s.Length; i >= 0; i--)
        {
            for (int j = p.Length - 1; j >= 0; j--)
            {
                bool first_macth = (i < s.Length && (p[j] == s[i] || p[j] == '.'));
                if (j + 1 < p.Length && p[j + 1] == '*')
                {
                    dp[i, j] = dp[i, j + 2] || first_macth && dp[i + 1, j];
                }
                else
                {
                    dp[i, j] = first_macth && dp[i + 1, j + 1];
                }
            }
        }
        return dp[0, 0];
    }

你可能感兴趣的:(算法进修,算法,leetcode,c#)