zoukankan      html  css  js  c++  java
  • 力扣 2020.08.19

    09. 回文数

    题目

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

    示例 1:

    输入: 121
    输出: true

    示例 2:

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

    示例 3:

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

    思路

    由于负数肯定不是回文数,所以碰到负数就返回false;

    非负数我们可以通过将其转化为字符串,然后利用字符串的倒序[::-1]来作比较。

    代码

    class Solution:
        def isPalindrome(self, x: int) -> bool:
            if x < 0:
                return False
            y = str(x)[::-1]
            if y == str(x):
                return True
            else:
                return False
    

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(n)

    647. 回文子数

    题目

    给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

    示例 1:

    输入:"abc"
    输出:3
    解释:三个回文子串: "a", "b", "c"
    示例 2:

    输入:"aaa"
    输出:6
    解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

    思路

    使用最简单的方法,逐个比较各个子串和回文子串是否相等。

    若相等,则结果加一;若不相等,则进行下一个。

    代码

    class Solution:
        def countSubstrings(self, s: str) -> int:
            result = 0
            for i in range(0,len(s)):
                for j in range(i+1, len(s)+1):
                    if s[i:j] == s[i:j][::-1]:
                        result += 1
    
            return result
    

    复杂度分析

    时间复杂度:O(n^2)

    空间复杂度:O(n)

    两道题的共同点

    今天的两道题都用到了python的字符串的反向输出功能,即切片的[::-1]即为反向输出。

    这也是python中比较好用的一个功能了,如果善用的话,可以使得代码简单不少。

    当然,切片的反转这个方法本身也是O(n)复杂度的。

    About me: 资深大猪蹄子
  • 相关阅读:
    微信小程序——gulp处理文件
    小程序开发经验总结
    微信小程序入门之构建一个简单TODOS应用
    3元体验腾讯云小程序后端解决方案
    C++笔记:面向对象编程(Handle类)
    你真的知道你看到的UTF-8字符是什么吗?
    Unity3D游戏开发之在Unity3D中视频播放功能的实现
    vb.net机房收费系统——存储过程
    Oracle基础学习4--Oracle权限传递
    我与京东的那些事儿
  • 原文地址:https://www.cnblogs.com/young233/p/13529798.html
Copyright © 2011-2022 走看看