【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】

简介: 【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】

Leetcode -342. 4的幂

题目:给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x

示例 1:

输入:n = 16

输出:true

示例 2:

输入:n = 5

输出:false

示例 3:

输入:n = 1

输出:true

提示:

  • 2^31 <= n <= 2^31 - 1
  1. 循环法

循环法的思路是,将n一直取余数,如果不为0,则说明不是4的幂,跳出循环,返回false;若为0,则取n的商,继续进入循环判断;直到n一直取商后取余不为0,或者最后n变成1;n变成1之后,则说明n是4的幂;

bool isPowerOfFour(int n)
    {
        if (n <= 0)
            return false;
        while (!(n % 4))
            n /= 4;
        if (n == 1)
            return true;
        else
            return false;
    }
  1. 二进制表示中 1 的位置

我们的思路是,4的幂二进制中,1都是在偶数位上,其他都是0,所以如果是4的幂,按位与上0xaaaaaaaa,结果就是0;但在这个条件之前的前提是n>0并且n是2的幂;

bool isPowerOfFour(int n)
    {
        //首先大于0;并且满足是2的幂;最后按位与上所有偶数二进制位都是 0,所有奇数二进制位都是1的数,即十六进制的0xaaaaaaaa
        //4的幂二进制数中,1都是在偶数位上,其他都是0,所以如果是4的幂,按位与上0xaaaaaaaa,结果就是0
        return n > 0 && (n & (n - 1)) == 0 && (n & 0xaaaaaaaa) == 0;
    }

Leetcode -344.反转字符串

题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例:

输入:s = [“h”, “e”, “l”, “l”, “o”]

输出:[“o”, “l”, “l”, “e”, “h”]

我们的思路是双指针,左指针下标从0开始,右指针下标从数组长度-1开始遍历,每交换一次左指针++,右指针- -,直到左指针大于右指针;

void reverseString(char* s, int sSize)
    {
        //左指针下标从0开始,右指针下标从数组长度-1开始
        int left = 0, right = sSize - 1;
        //当左指针比右指针的值小,循环继续
        while (left < right)
        {
            char tmp = s[left];
            s[left] = s[right];
            s[right] = tmp;
            left++;
            right--;
        }
    }

Leetcode -345.反转字符串中的元音字母

题目:给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。

示例 1:

输入:s = “hello”

输出:“holle”

示例 2:

输入:s = “leetcode”

输出:“leotcede”

我们的思路是双指针,左指针下标从0开始,右指针下标从数组长度-1开始,两个指针都从两边开始找元音字母,两个都找到就交换,否则继续找;

bool isvowel(char ch)
    {
        //创建一个元音字母的数组
        char vowel[] = "aeiouAEIOU";
        //遍历元音字母的数组
        for (int i = 0; vowel[i]; i++)
        {
            if (ch == vowel[i])
            {
                //找到返回true
                return true;
            }
        }
        //否则返回false
        return false;
    }
    char* reverseVowels(char* s)
    {
        //左指针下标从0开始,右指针下标从数组长度-1开始
        int left = 0, right = strlen(s) - 1;
        //当左指针比右指针的值小,循环继续
        while (left < right)
        {
            //左指针找元音字母,左指针要在数组长度范围内找
            //进入isvowel函数判断是否元音字母,
            //若返回true证明是元音字母,取非,变成false,就跳出循环;
            //即找到元音字母就跳出循环,否则继续找;
            while (left < strlen(s) && !isvowel(s[left]))
            {
                left++;
            }
            //右指针同理
            while (right > 0 && !isvowel(s[right]))
            {
                right--;
            }
            //当左指针比右指针值小时,交换
            if (left < right)
            {
                char tmp = s[left];
                s[left] = s[right];
                s[right] = tmp;
                left++;
                right--;
            }
        }
        return s;
    }
目录
相关文章
|
1月前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
1月前
|
存储 算法
LeetCode第43题字符串相乘
LeetCode第43题"字符串相乘"的解题方法,通过使用数组存储乘积并处理进位,避免了字符串转换数字的复杂性,提高了算法效率。
LeetCode第43题字符串相乘
|
1月前
|
算法 Java
LeetCode第28题找出字符串中第一个匹配项的下标
这篇文章介绍了LeetCode第28题"找出字符串中第一个匹配项的下标"的两种解法:暴力解法和KMP算法,并解释了KMP算法通过构建前缀表来提高字符串搜索的效率。
LeetCode第28题找出字符串中第一个匹配项的下标
|
1月前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
1月前
|
算法
LeetCode第8题字符串转换整数 (atoi)
该文章介绍了 LeetCode 第 8 题字符串转换整数 (atoi)的解法,需要对字符串进行格式解析与校验,去除前导空格和处理正负号,通过从高位到低位的计算方式将字符串转换为整数,并处理越界情况。同时总结了这几道题都需要对数字的表示有理解。
LeetCode第8题字符串转换整数 (atoi)
|
3月前
|
索引
力扣每日一题 6/27 字符串 贪心
力扣每日一题 6/27 字符串 贪心
27 0
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
42 6
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
37 4
|
1月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
79 2
|
1月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
37 7