探索极限:利用整数或字符串操作找出翻转后的最大数字

本篇博客会讲解力扣"1323. 6 和 9 组成的最大数字"的解题思路,这是题目链接

对于这道题目,我会讲解2种解题思路,分别是直接操作整数,和利用字符串操作。希望大家通过本题学习关于整数和字符串的技巧。

显然,这道题要求我们找出一个整数最高位的6,并把这一位改成9。

思路1

对于一个整数,我们可以通过反复地"mod10除10"取出这个整数的每一位,比如:

复制代码
1234 %10 = 4
1234 / 10 = 123
123 % 10 = 3
123 / 10 = 12
12 % 10 = 2
12 / 10 = 1
1 % 10 = 1
1 / 10 = 0

可以看到,通过反复地"mod10除10",我们就把1234的每一位从右往左取出来了,即4 3 2 1

我们可以从右往左把题目给我们的整数的每一位取出来,并且找到最高位的6,再把这一位改成9。具体的,我们需要用一个变量记录取出来的是从右往左的第几位,并维护一个变量max来记录最高位的6是第几位。

至于如何把最高位的6改成9也非常简单,比如,96996中最高位的6是从右往左的第3位(假设最右边那一位是第0位),我们只需要在这个整数的基础上加上3乘103,即3000即可。

c 复制代码
int maximum69Number (int num){
    int pos = 0; // 记录从右往左第几位,假设最低位是第0位
    int max = -1; // 记录最高位的6是从右往左第几位
    int ret = num;
    // 取出num的每一位,找出最高位的6
    while (num)
    {
        if (num % 10 == 6)
        {
            max = pos;
        }

        num /= 10;
        ++pos;
    }

    // 把最高位的6转换成9
    if (max != -1)
    {
        ret += 3 * (int)pow(10, max);
    }

    return ret;
}

思路2

接下来讲解一个非常巧妙的解法,这需要运用字符串的相关知识。

首先我们需要了解到,我们可以使用sprintf函数把整数转换成字符串,也可以使用sscanf函数把字符串转换成整数。不了解这两个函数的朋友可以先阅读我的这篇博客

我们还需要了解strchr函数,这个函数可以查找一个字符,如果找到了,就会返回最左边的这个字符的地址,否则返回NULL指针。

对于本题,我们可以进行如下操作:

  1. 使用sprintf函数,把题目给的整数转换成字符串。
  2. 使用strchr函数,找到这个字符串最左边的6。
  3. 把字符串最左边的6改成9。
  4. 使用sscanf函数,把字符串重新转换成整数,并返回。
c 复制代码
int maximum69Number(int num) {
	char ch[6];
	// 把整数转换成字符串
	sprintf(ch, "%d", num);

	// 找到字符串中的第一个6,并改成9
	char* cp = strchr(ch, '6');
	if (cp)
	{
		*cp = '9';
	}

	// 把字符串重新转换成整数
	int ret = 0;
	sscanf(ch, "%d", &ret);
	return ret;
}

总结

  1. 使用"mod10除10"的方法取出一个整数的每一位。
  2. 使用sprintf和sscanf把字符串和整数相互转换。
  3. 使用strchr函数查找字符串中的字符。

感谢大家的阅读!

相关推荐
codeejun1 小时前
每日一Go-73、云原生成本优化 —— 资源限制 & 指标驱动扩容
开发语言·云原生·golang
888CC++1 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
就叫_这个吧1 小时前
Java注解、元注解、自定义注解定义及应用
java·开发语言·注解
Sam_Deep_Thinking2 小时前
聊聊Java中的of
java·开发语言·架构
(●—●)橘子……3 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科4 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
小小de风呀4 小时前
de风——【从零开始学C++】(十一):list的基本使用和模拟实现
开发语言·c++·list
KaMeidebaby5 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
三行数学5 小时前
Matlab之父克利夫·莫勒尔逝世
开发语言·matlab