【LeetCode刷题】326 3的幂 || 345 翻转字符串中的元音字母

本文介绍两种算法实现:一是判断一个整数是否为3的幂次方,二是翻转字符串中的元音字母。前者通过递归或预设最大值的方式判断,后者利用双指针技巧高效完成元音字母的反转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

326、3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。

示例 1:
输入: 27
输出: true

示例 2:
输入: 0
输出: false

示例 3:
输入: 9
输出: true

class Solution(object):
    def isPowerOfThree(self, n):
        import math
        for i in range(n):
            if n == math.pow(3,i) :

                return True

            else:
                continue
        return False

solution = Solution()
print(solution.isPowerOfThree(81))
class Solution1(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 1:
            return True
        elif n % 3 != 0 or n == 0:
            return False
        else:
            return self.isPowerOfThree(n/3)
'''
在整数范围3的19次方是最大的,它除以num余数等于0则说明num是3的幂
'''
class Solution2(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n > 0 and 1162261467 % n == 0

345、翻转字符串中的元音字母

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 1:
输入: “hello”
输出: “holle”

示例 2:
输入: “leetcode”
输出: “leotcede”

class Solution(object):
    def reverseVowels(self, s):
        a =['a','o','e','u','A','E','O','U']
        i = 0
        j = len(s)-1
        s = list(s)
        while i<j:
            while  s[i] not in a and i < j:
                i += 1
            while s[j] not in a and i < j :
                j -= 1
            s[i],s[j] = s[j],s[i]  #同时赋值,元素替换

            i += 1
            j -= 1
        return ''.join(s)

solution =Solution()
print(solution.reverseVowels("leetcode"))
#方法二
class Solution1(object):
    def reverseVowels(self, s):
        a =['a','o','e','u','A','E','O','U']
        s = list(s)
        b = []
        for i,j in enumerate(s):
            if j in a:
                b.append(i)
        
        k = 0
        l = len(b)-1
        while k<l:
            s[b[k]],s[b[l]] = s[b[l]],s[b[k]]
            k += 1
            l -= 1
        return ''.join(s)


solution = Solution1()
print(solution.reverseVowels("leetcode"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeremy_lf

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值