前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】

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

作者头像
YoungMLet
发布2024-03-01 09:28:08
1090
发布2024-03-01 09:28:08
举报
文章被收录于专栏:C++/Linux

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的幂;

代码语言:javascript
复制
		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的幂;

代码语言:javascript
复制
		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开始遍历,每交换一次左指针++,右指针- -,直到左指针大于右指针;

代码语言:javascript
复制
		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开始,两个指针都从两边开始找元音字母,两个都找到就交换,否则继续找;

代码语言:javascript
复制
		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;
		}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode -342. 4的幂
  • Leetcode -344.反转字符串
  • Leetcode -345.反转字符串中的元音字母
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档