【Leetcode -405.数字转换为十六进制数 - 409.最长回文串】

news2024/11/15 16:19:48

Leetcode

  • Leetcode -405.数字转换为十六进制数
  • Leetcode - 409.最长回文串

Leetcode -405.数字转换为十六进制数

题目:给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意 :
十六进制中所有字母(a - f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。 给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

示例 1:
输入 :
26
输出 :
“1a”

示例 2:
输入 :
-1
输出 :
“ffffffff”

我们的思路是将这个数num的二进制转换成十六进制,num的二进制中,每四位就会转换为十六进制的一位数,所以每次我们用num按位与上0xf,即是15,因为15的二进制形式为 1111 ,按位与上0xf就能得到num二进制的后四位,然后将按位与得到的数进行判断处理,放入数组中;最后将num向右移四位,进行下一次循环;

以26为例:

在这里插入图片描述

向右移四位后按位与如下图,所以最终结果为 " 1a ";
在这里插入图片描述

		char* toHex(int num)
		{
		    //开辟9个char空间,因为整型的十六进制最长的长度为8,加上'\0'就9个
		    char* nums = (char*)malloc(sizeof(char) * 9);
		
		    //对于负数,将它强转成无符号数处理
		    unsigned newnum = (unsigned int)num;
		    int i = 0;
		
		    //如果数组中只有一个0,就在0后面加上'\0',返回数组
		    if (num == 0)
		    {
		        nums[0] = '0';
		        nums[1] = '\0';
		        return nums;
		    }
		
		    //当这个数转成无符号数之后不为0,进入循环
		    while (newnum > 0)
		    {
		        //0xf即为15,15的二进制为 1111 
		        //即将这个数按位与上 1111 ,得到这个数的二进制的后四位,存放到flag中
		        //因为二进制表示的数,每四位二进制就表示一为十六进制的数
		        int flag = newnum & 0xf;
		
		        //如果小于10,就将它转成字符放到数组中,然后i++
		        if (flag < 10)
		        {
		            nums[i++] = flag + '0';
		        }
		
		        //如果大于等于10,先减去10,再加上字符a,使它转换成十六进制的字符
		        else
		        {
		            nums[i++] = flag - 10 + 'a';
		        }
		
		        //然后将这个数向右移四位,判断下一个十六进制的位数
		        newnum >>= 4;
		    }
		
		    //循环结束后在i处加上'\0'
		    nums[i] = '\0';
		
		    //最后将数组逆置,因为放进去的时候是这个数二进制的尾部开始放,所以读的时候要倒过来读
		    int left = 0, right = i - 1;
		    while (left < right)
		    {
		        char tmp = nums[left];
		        nums[left++] = nums[right];
		        nums[right--] = tmp;
		    }
		
		    return nums;
		}

Leetcode - 409.最长回文串

题目:给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。

在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。

示例 1:
输入:s = “abccccdd”
输出 : 7
解释 :
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

示例 2 :
输入 : s = “a”
输出 : 1

示例 3:
输入 : s = “aaaaaccc”
输出 : 7

我们的思路是,用一个hash数组记录字符串中字符出现的次数,count记录回文串的长度,只要某个字符出现了两次,就证明可以构成回文串,就将2加到count中,然后再将这个字符的位置置0;对于奇数个的字符,对于上述的处理之后,现在hash数组中的位置对应的数值只能是0或者1,0的话不管,1的话只保留一个,因为在回文串中是对称的,只能有一个奇数的字符;具体的代码和注释如下:

		int longestPalindrome(char* s)
		{
		    //创建一个hash数组,长度为58,因为字符串中含有大小写字母的字符,从'A'到'z'一共就58个字符
		    int hash[58] = { 0 };
		
		    //count统计最长的回文串
		    int count = 0;
		
		    //遍历字符串,以字符作为hash数组的下标记录这个字符出现的次数,每次出现就++
		    //当这个位置出现了两次,证明可以构成回文串,就使count加2,并将这个位置置0
		    for (int i = 0; i < strlen(s); i++)
		    {
		        hash[s[i] - 'A']++;
		        if (hash[s[i] - 'A'] > 1)
		        {
		            count += 2;
		            hash[s[i] - 'A'] = 0;
		        }
		    }
		
		    //遍历以'A'到'z'作为hash数组的下标,现在它们的位置的数值只能是0或者1
		    //奇数个的字符在回文串中只能出现一个,所以其他奇数个的字符都不算入count中,用count += hash[i] - 1处理,本来hash[i]是1,减去1后就是0
		    int flag = 0;
		    for (int i = 0; i < 58; i++)
		    {
		        if (hash[i] % 2)
		        {
		            flag = 1;
		            count += hash[i] - 1;
		        }
		    }
		
		    //最后留下来的奇数个的字符算入count中
		    if (flag)
		        count++;
		
		    //最后返回回文串长度
		    return count;
		
		}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/494334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flask+opencv+实时滤镜(原图、黑白、怀旧、素描)

简介&#xff1a;滤镜&#xff0c;主要是用来实现图像的各种特殊效果。图像滤镜用于改变图像的视觉效果&#xff0c;使其具有特定的风格。下面是这三种滤镜的详细说明&#xff1a; 1、黑白&#xff08;Grayscale&#xff09;&#xff1a;黑白滤镜将彩色图像转换为灰度图像&…

全景丨0基础学习VR全景制作,平台篇第17章:热点功能-视频

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 功能说明 应用场景 热点&#xff0c;指在全景作品中添加各种类型图标的按钮&#xff0c;引导用户通过按钮产生更多的交互&#xff0c;增加用户的多元化体验。 视频热点&#xff0c;即点击热点后弹出一个…

Camtasia2023全新版下载安装使用教程

Camtasia2023是一款功能强大的屏幕录制和视频编辑软件。它可以帮助用户轻松地记录电脑屏幕上的任何操作&#xff0c;并可以将录制的视频进行编辑和制作成高质量的视频教程、演示文稿、培训课程等。 Camtasia具有直观的界面和易于使用的工具&#xff0c;包括添加文本、音频、动…

qt程序设置同时只能运行一个,避免重复打开

qt程序设置同时只能运行一个&#xff0c;避免重复打开 [1] qt程序设置同时只能运行一个&#xff0c;避免重复打开[2] Qt 桌面软件防止重新启动一、创建互斥量二、使用QLockFile 创建锁定文件&#xff0c;通过能否锁定来判断是否已经有程序启动。三、使用 系统信号量 QSystemSem…

基于ATECLOUD的航电系统可灵活扩展自动化测试平台

随着电子技术的发展&#xff0c;航电系统在飞机整机中的重要性飞速提升。据统计&#xff0c;近年来航电系统在飞机出厂成本中的比例直线上升&#xff0c;航电系统研发成本已占飞机研制总成本的近30%&#xff0c;并保持着持续扩大的趋势。测试保障作为航电产业链至关重要的一环&…

一起学 WebGL:绘制图片

大家好&#xff0c;我是前端西瓜哥。之前讲解了如何用 WebGL 绘制红色三角形&#xff0c;今天西瓜哥带大家来学习如何将图片绘制到画布上的技术&#xff1a;纹理映射&#xff08;texture mapping&#xff09;。 本文为系列文章中的一篇&#xff0c;请先阅读&#xff1a; 《一起…

25000 字详解 23 种设计模式(多图 + 代码)

25000 字详解 23 种设计模式&#xff08;多图 代码&#xff09; 目录 创建型模式结构型模式行为型模式总结 前言 一直想写一篇介绍设计模式的文章&#xff0c;让读者可以很快看完&#xff0c;而且一看就懂&#xff0c;看懂就会用&#xff0c;同时不会将各个模式搞混。 设计…

记录一次docker容器引起的时间相差8h的问题

一、背景 系统打印日志时间小8h&#xff0c;部分插入mysql的日期却大8h&#xff0c;简直诡异。 测试时间是上午10:05 经过排查&#xff0c;mysql设置的时区&#xff0c;链接url设置的时区都是ok的。而且有其他服务时间正常&#xff0c;故排除MySQL的问题。 二、排查 2.1 查…

AIGPT中文版(无需魔法,直接使用)不愧是生活工作的好帮手。

AIGPT AIGPT是一款非常强大的人工智能技术的语言处理工具软件&#xff0c;它具有 AI绘画 功能、AI写作、写论文、写代码、哲学探讨、创作等功能&#xff0c;可以说是生活和工作中的好帮手。 我们都知道使用ChatGPT是需要账号以及使用魔法的&#xff0c;其中的每一项对我们初学…

09-Vue技术栈(TodoList案例)

目录 1、前期准备2、组件化编码流程3、拆分静态组件3.1 app组件3.2 TodoList组件3.2.1 TodoItem组件 3.3 TodoFooter组件 4、实现动态组件5、实现交互5.1 渲染页面5.2 添加功能5.3 勾选or取消勾选一个todo5.4 删除一个todo5.5 渲染TodoFooter底部内容5.6 全选or取消全选5.7清除…

软考算法-排序篇-下

排序篇 一&#xff1a;故事背景二&#xff1a;冒泡排序2.1 概念2.2 画图表示2.3 代码实现2.4 总结提升 三&#xff1a;快速排序3.1 概念3.2 画图表示3.3 代码实现3.4 总结提升 四&#xff1a;归并排序4.1 概念4.2 画图表示4.3 代码实现4.4 总结提升 五&#xff1a;基数排序5.1 …

第二章——进程与线程(上)

上船不思岸上人&#xff0c;下船不提船上事 文章目录 2.1.1 进程的概念&#xff0c;组成&#xff0c;特征知识总览进程的概念进程的组成——PCB程序是如何运行的进程的组成进程的特征知识回顾 2.1.2 进程的状态与转换&#xff0c;进程的组织知识总览创建态&#xff0c;就绪态运…

《花雕学AI》用Edge和chrome浏览器体验GPT-4智能聊天的神奇免费插件,Sider – 聊天机器人的新选择

你有没有想过和人工智能聊天&#xff1f;你有没有想过用浏览器就能和GPT-4这样的先进的聊天机器人对话&#xff1f;如果你有这样的想法&#xff0c;那么你一定要试试Sider这个神奇的免费插件。 Sider&#xff08;Sider – AI Sidebar&#xff09;是一款基于ChatGPT的智能侧边栏…

零基础小白学5G网络优化技术,最常陷入的怪圈有哪些?

“赛道”这个词是自媒体最喜欢谈的&#xff0c;因为生活里面处处是赛道。从上小学选择哪个中学&#xff0c;高考选择哪个专业&#xff0c;大学毕业选择哪个行业...... 一开始就选对赛道的人&#xff0c;少之又少&#xff0c;都是需要经历和试错才可以。面对行业和工作这个赛道&…

豪取BAT!超详细暑期实习算法面经(非科班无论文)

面试锦囊之面经分享系列&#xff0c;持续更新中 赶紧后台回复"面试"加入讨论组交流吧 写在前面 本人基本情况&#xff1a;211本硕&#xff0c;本科电子信息工程&#xff0c;硕士通信与信息系统&#xff0c;典型的非科班&#xff0c;无论文&#xff0c;两段实习经历…

UNIX系统调用和库函数(详细讲解)

什么是系统调用&#xff1f; 所有的操作系统都提供多种服务的入口点&#xff0c;由此程序向内核请求服务。各种版本的 UNIX 实现都提供良好定义、数量有限、直接进入内核的入口点&#xff0c;这些入口点被称为系统调用(system call,见图1-1) Research UNX 系统第7版提供了约5…

复古视觉大闸蟹创意海报设计

一、新建画布1500*2300像素&#xff0c;分辨率72 二、把文案要求拖入新建的画布中&#xff0c;更改文字颜色&#xff0c;然后打组命名为文案 三、拖入一个大闸蟹到画面当中&#xff0c;点击视图&#xff0c;新建一个居中的参考线&#xff0c;750居中 四、给画面添加一个背景&am…

关于WPA3-H2E的技术讲解

序言 H2E是Hash-To-Element的缩写。 问:虽然使用WPA3 SAE解决了offline dictionary破解密钥的问题,但是原先用于生成PMK的算法在计算时间上和密钥有关联性(这也行?),仍然存在所谓被side-channel方式破解。 解:新的算法,使用hash计算一次即可,堵死这个理论缺口[4]。…

盖雅工场发布数字化转型人效实践案例集

近日&#xff0c;盖雅工场重磅发布《聚集人效&#xff0c;重塑组织&#xff1a;典范企业管理实践案例集》&#xff08;以下简称案例集&#xff09;。 过去一年&#xff0c;盖雅工场携旗下盖雅学苑访谈了来自制造业、服务业、连锁零售业、汽车产业的几十家企业后&#xff0c;并…

【喜报】通付盾获评苏州市知识产权优势型企业!

近日&#xff0c;苏州市第二批知识产权强企培育工程成长型、优势型、引领型企业名单公示&#xff0c;江苏通付盾科技有限公司获评“苏州市知识产权强企培育工程-优势型企业”。 *名单发布来源&#xff1a;苏州市工业和信息化局 苏州市知识产权优势型企业 获评优势型企业的主要…