菜鸟刷题Day3

⭐作者:别动我的饭
⭐专栏:菜鸟刷题
⭐标语:悟已往之不谏,知来者之可追
在这里插入图片描述

一.字符串压缩:面试题 01.06. 字符串压缩 - 力扣(LeetCode)

描述

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。


解题思路

遍历字符串,统计字符的个数就行,但是将数字转成字符串会有些麻烦,其实给每一位数字加上’\0’就可以得到相应的数字字符。可以考虑这个办法。

int itoa(char*str,int num)
{//简单的一个数字转字符串函数,将转换后的数字字符串放到str空间中
    char tmp[16]={0};
    int count=0;
    while(num)
    {
        tmp[count++]=(num%10)+'0';//将个位数字转换为对应数字字符放到tmp空间中(逆序的)
        num/=10;
	}
    for(int i=0;i<count;i++)
    {
        str[i]=tmp[count-i-1];//逆序将数字字符放入传入的str空间中
    }
return count;//返回转换的数字字符串长度
}
char*compressString(char*S)
{
    int len=strlen(S);
    //申请新的空间,注意空间有可能所需会变大,比如abc->a1b1c1
    char*newstr=(char*)calloc(len,3);
    int pos=0;
    char*s=S;
    while(*s!='\0')
    {
        char*n=s+1;
        while(*n!='\0'&&*n==*s)
            n++;//走到下一个不同字符处停下
        int l=n-s;//相同字符的长度
        newstr[pos++]=*s;//先赋值对应字符
        pos+=itoa(newstr+pos,l);//编写了一个数字转字符函数,将数字放到字符串空间指定位置
        s=n;//下一个不同的字符处
    }
    return strlen(newstr)>=len?S:newstr;
}

但是作为一个手搓过string的博主,这种题目不来占个string的便宜说的过去吗?

首先介绍一个库函数:to_string这是一个将数字转为数字字符的库函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NR29I3cA-1679378671546)(C:\Users\羽北冥\AppData\Roaming\Typora\typora-user-images\image-20230321132933270.png)]

在统计字符的时候,如果下一个字符和当前字符不一致或者说已经到结尾了的时候,该字符也就结束了。

class Solution {
public:
    string compressString(string S) {
        string ans="";
        int cnt=0;
        int len=S.size();//string有效字符用size

        for(int i=0;i<len;i++)
        {
            cnt++;
            if(i==len-1||S[i]!=S[i+1])//到结尾或者下一个字符和该字符不相同就结束了
            {
                ans+=S[i]+to_string(cnt);
                cnt=0;//从头开始计数
            }
        }
        return ans.size()<len?ans:S;
    }
};

二.配对交换:面试题 05.07. 配对交换 - 力扣(LeetCode)

描述

配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)


解题思路

这没什么骚操作,就当老实人呗。通过按位与分别拿到一个数的奇数位和偶数位,再将奇数位左移一位+偶数位右移一位,就可以达到最后的结果。

int exchangeBits(int num){

    int odd=0b10101010101010101010101010101010;//二进制
    int jdd=0b01010101010101010101010101010101;

    odd&=num;
    jdd&=num;

    int ret=(odd>>1)+(jdd<<1);
    return ret;

}

三.递归乘法:面试题 08.05. 递归乘法 - 力扣(LeetCode)

描述

递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。


解题思路

a*b也就是a个b相加的结果,所以只要递归调用加法就行了。如果有一个数为0,那就直接返回0,有1就直接返回那个数本身。没有这些特殊数,那就只好递归调用咯。递归要有限制条件,这题的限制条件是,我们只需要调用a/b次递归。

int multiply(int A, int B){
    if(B==0)
   		return 0;

    if(B==1)
    	return A;

    return A+multiply(A,B-1);

}

四.挑7:挑7_牛客题霸_牛客网 (nowcoder.com)

描述

输出 1到n之间 的与 7 有关数字的个数。

一个数与7有关是指这个数是 7 的倍数,或者是包含 7 的数字(如 17 ,27 ,37 … 70 ,71 ,72 ,73…)


解题思路

这个题目要注意的地方在于,存在那种既是七的倍数又包含七的数字,所以判断的时候用||对这两个条件一起判断会比较好,否则还要做额外处理。将这个数与七取模结果为零就表明这个数是七的倍数,至于包含七就只需要不断除十模十即可。

#include <stdio.h>

int main() 
{
    int n=0;
    int count=0;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=7;i<=n;i++)//直接从7开始,因为之前不可能有包含7或者7的倍数
        {
            int tmp=i;
            while(tmp>0)
            {
                if(tmp%10==7)
                    break;
                tmp/=10;
            }

            if(i%7==0||tmp%10==7)
            {
                count++;
            }
        }
        printf("%d",count);
    }

    return 0;
}

人们总是高估短期努力带来的提升,而小看长期坚持带来的提升。今天是刷题第三天了,你还在坚持吗?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python程序员看见一个好看的手机壁纸网站,开撸!

人生苦短&#xff0c;我用python 最近好像没什么大事&#xff0c; .那就采集一下小——姐——姐————看下吧~ python 安装包资料:点击此处跳转文末名片获取 最近有同学的爬虫代码出了bug&#xff0c;给问我怎么改 于是就发现了这个好看的手机壁纸网站。 这个图片应该是违规…

【Unity工具,简单学习】PUN 2,多人在线游戏开发,初步使用

【Unity工具&#xff0c;简单学习】PUN 2&#xff0c;多人在线网络工具前言简单介绍安装简单使用一些 nomenclature 部分连接到 Server设置简单的大厅UI游戏场景搭建关卡加载事后前言 链接 简单介绍 PUN 可以让你简单地开发多人游戏&#xff0c;在全球范围推出 让开发者不用…

【Java学习笔记】38.Java 发送邮件

Java 发送邮件 使用Java应用程序发送 E-mail 十分简单&#xff0c;但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。 您可以从 Java 网站下载最新版本的 JavaMail&#xff0c;打开网页右侧有个 Downloads 链接&#xff0c;点击它下载。 您…

MySQL注入秘籍【上篇】

MySQL注入秘籍【上篇】1.数据库敏感信息常用语句2.联合(UNION)查询注入3.报错注入原理常见报错注入函数1.数据库敏感信息常用语句 获取数据库版本信息 select version(); select innodb_version;获取当前用户 select user();获取当前数据库 select database()&#xff1b;数…

高数重点总结

高数 公式不要去死记 配合训练题在训练中记忆 完成一下这些题目 高中函数图像回忆 与其记忆各种公式不如去思考他们的本质 这和调用c动态库可不一样 考试的时候你相当于在使用汇编答题 1 定义域&#xff08;x&#xff09; 性质 1/x(x!0)√x(x>0 || x0)log a x (x>…

血氧仪是如何得出血氧饱和度值的?

目录 一、血氧饱和度概念 二、血氧饱和度监测意义 三、血氧饱和度的监测方式 四、容积脉搏波计算血氧饱和度原理 五、容积脉搏波波形的测量电路方案 1&#xff09;光源和光电探测器的集成测量模块&#xff1a;SFH7050—反射式 2&#xff09;模拟前端 六、市面上血氧仪类型…

Spring 源码解析 - Bean创建过程 以及 解决循环依赖

一、Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析&#xff0c;我们可以得到结论&#xff0c;资源文件中的 bean 定义信息&#xff0c;被组装成了 BeanDefinition 存放进了 beanDefinitionMap 容器中&#xff0c;那 Bean 是…

图形视图框架QGraphicsScene(场景,概念)

QGraphicsScene 该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用&#xff0c;用于在 2D 表面上可视化图形项目&#xff0c;例如线条、矩形、文本甚至自定义项目。 QGraphicsScene具有的功能&#xff1a; 提供用管理大量数据项的高速接口传播事件到每一个图形项…

艹,终于在8226上把灯点亮了

接上次点文章ESP8266还可以这样玩这次&#xff0c;我终于学会了在ESP8266上面点亮LED灯了现在一个单片机的价格是几块&#xff0c;加上一个晶振&#xff0c;再来一个快递费&#xff0c;十几块钱还是需要的。所以能用这个ESP8266来当单片机玩&#xff0c;还是比较不错的可以在ub…

【设计模式】创建型设计模式

文章目录1. 基础①如何学习设计模式② 类模型③ 类关系2. 设计原则3. 模板方法① 定义②背景③ 要点④ 本质⑤ 结构图⑥ 样例代码4. 观察者模式① 定义②背景③ 要点④ 本质⑤ 结构图⑥ 样例代码5. 策略模式① 定义②背景③ 要点④ 本质⑤ 结构图⑥ 样例代码1. 基础 ①如何学习…

三维电子沙盘数字沙盘开发教程第7课

三维电子沙盘数字沙盘大数据人工智能开发教程第7课设置system.ini 如下内容Server122.112.229.220userGisTestPasswordchinamtouch.com该数据库中只提供 成都市火车南站附近的数据请注意&#xff0c;104.0648,30.61658利用三方工具&#xff0c;如幻影粒子&#xff1a;或者flash…

python例程:《彩图版飞机大战》程序

目录开发环境要求运行方法《彩图版飞机大战》程序使用说明源码示例源码及说明文档下载路径开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 7、Windows 10。 Python版本&#xff1a;Python 3.7.1。 开发工具&#xff1a;PyCharm 2018。…

软件测试拿了几个20K offer,分享一波面经

1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#xff0c;不断…

算法基础---基础算法

文章目录 快速排序归并排序二分 整数二分浮点数二分高精度 高精度加法高精度减法高精度乘法高精度除法前缀和 一维前缀和二维前缀和差分 一维差分二维差分双指针位运算离散化区间合并一、快速排序 思想&#xff1a;1.首先确定一个分界点&#xff08;随机取任意一点为…

【云原生】k8s集群命令行工具kubectl基础操作命令实践详解

kubectl基础操作命令详解一、准备工作1.1、Replication Controller1.2、Deployment1.3、DaemonSet1.4、查看创建的svc和pod1.5、kubectl 命令自动补全设置二、kubectl语法三、基础操作命令3.1、api-resources3.2、api-versions3.3、create3.4、expose3.5、run3.6、set3.6.1、en…

filebrowser的权限实现RBAC效果

filebrowser安装和支持定制化&#xff0c;建议参考我这一篇文章filebrowser安装言归正传&#xff0c;目前发现客户需要有文件权限管理功能&#xff0c;我一开始也没仔细研究这块&#xff0c;我以为不支持呢&#xff0c;我今天就认真的了研究 下这个存储服务&#xff0c;其实是支…

前端网络安全

什么是同源策略同源指的是&#xff1a;协议、端口号、域名必须一致。他是浏览器的一个用于隔离潜在恶意文件的重要安全机制。限制了从同一个源加载的文档或脚本&#xff0c;与另一个源的资源进行交互。同源策略主要限制了三个方面&#xff1a;当前域下的js脚本不能够访问其他域…

jsoup 框架的使用指南

概述 参考&#xff1a; 官方文档jsoup的使用JSoup教程jsoup 在 GitHub 的开源代码 概念简介 jsoup 是一款基于 Java 的 HTML 解析器&#xff0c;它提供了一套非常省力的 API&#xff0c;不但能直接解析某个 URL 地址、HTML 文本内容&#xff0c;而且还能通过类似于 DOM、CS…

【Java进阶篇】——反射机制

一、反射的概念 1.1 反射出现的背景 Java程序中&#xff0c;所有对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致 Object obj new String("hello")、obj.getClass(); 如果某些变量或形参的声明类型…

1、Linux初级——linux命令

下载镜像&#xff1a;http://cn.ubuntu.com/dowload 一、基本命令 1、alias&#xff08;给命令取别名&#xff09; 例如&#xff1a;alias clls -la&#xff08;只是临时的&#xff09; 2、配置文件$ vim ~/.bashrc $ vim ~/.bashrc // 使用vim打开配置文件 (1)在配置文件…