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

本篇博客会讲解力扣"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函数查找字符串中的字符。

感谢大家的阅读!

相关推荐
二十七日秋3 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
晚风叙码3 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
北冥you鱼3 小时前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
silvamux_3 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵
dingzd953 小时前
TikTok账号登录态失效的Cookie字段排查路径
开发语言·php·跨境电商·营销策略
abc light3 小时前
ARM 裸机开发(1)——ARM 体系结构
c语言·arm开发
曹牧3 小时前
C#:The operation has timed out
开发语言·c#
你看我名字4 小时前
数眼智能 Search + Reader 实战:联网问答怎样避免“搜到了,却引用错了”
android·java·开发语言
重生之小比特4 小时前
【算法拾光】前缀和|连续的子数组和 + 和相同的二元子数组
算法·leetcode·哈希算法
小嘉丶学长4 小时前
Day13 · 列表与元组
linux·运维·服务器·开发语言·python