当前位置: 首页 > news >正文

C++小白修仙记_LeetCode刷题_1323 6 和 9 组成的最大数字

1323. 6 和 9 组成的最大数字

给你一个仅由数字 6 和 9 组成的正整数 num。

你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。

请返回你可以得到的最大数字。

示例

输入:num = 9669

输出:9969

解释:

改变第一位数字可以得到 6669 。

改变第二位数字可以得到 9969 。

改变第三位数字可以得到 9699 。

改变第四位数字可以得到 9666 。

其中最大的数字是 9969 。

解法:贪心、字符串

class Solution {
public:int maximum69Number (int num) {string s = to_string(num);for(char &ch : s){if(ch == '6'){ch = '9';break;}}return atoi(s.c_str());}
};

补充将字符串、数字互相转换的函数

int 转 string

通过 std::to_string() 函数转换
通过 ostringstream 转换
通过 sprintf 转换

string 转 int

通过 istringstream 转换
使用 sscanf 来转化
使用 atoi 转换
//int转string
//1.通过 std::to_string()函数转换
#include <iostream>
int main()
{int num = 123;std::cout << std:: to_string(num);return 0;
}
//这种方式在 C++11 中才能使用,编译时记得加上 --std=c++11 的选项//2.通过ostringstream转换
#include <iostream>
#include <sstream>
int main()
{int num = 123;std::ostringstream ss;ss << num;std::cout << ss.str();return 0;
}
//这是一种通过字符流的方式将整数转换成字符串,这种方式在C++11之前也可以使用//3.通过sprintf转换
#include <iostream>
int mian()
{int num = 123;char buffer[256];sprintf(buffer,"%d",num);printf("%s",buffer);return 0;
}
//这是一种C语言中的转换方式,sprintf 也可以换成更安全的 snprintf 函数//string转int
//1.通过istringstream转换
#include <iostream>
#include <sstream>
int main()
{std::string str = "1000";int num = 0;std::istringstream ss(str);ss >> num;std::cout << num;return 0;
}
//使用 istringstream 可以从字符流中读取整数,与 ostringstream 是一种相反的操作//2.使用 sscanf 来转化
#include <iostream>
#include <stdio.h>
int main()
{std::string str = "1000";int num = 0;sscanf(str.c_str(),"%d",&num);std::cout << num;return 0;
}
//注意 sscanf 函数的第一个参数类型是 const char *,string类型的参数需要用 c_str()函数 转换一下//3.使用atoi转化
#include <iostream>
#include <stdlib.h>
int main()
{std::string str = "1000";std::cout << atoi(str.c_str());return 0;
}
//atoi 函数的头文件是 stdlib.h,同样是一个C语言中的函数

解法:贪心、数学

思想:digit = 10的 log以10为底以num为真值 的次方 ,代表的是num的位数,如果最高位为6,则变9,如果最高位不是6,则把digit基值除以10,继续判断第一位是否为6,为6的话直接将 num 加 3 * digit,将6改为9,结果即为所求。

class Solution {
public:int maximum69Number (int num) {int digit = pow(10,(int)log10(num));while(digit > 0){if((num / digit) % 10 == 6) //最高位等于6{num += 3 * digit; //最高位 + 3000,最高位 6 变 9return num;}digit /= 10;//最高位不为6,继续低一位进行判断}return num;}
};
http://www.sczhlp.com/news/13476/

相关文章:

  • markdown-it-mathjax3-pro —— 新一代 Markdown 数学公式渲染插件
  • 第一个博客
  • 修改win11右键默认显示更多选项
  • 报表相关知识点
  • 25-暑期-来追梦noip-卷3 总结
  • 题目等候区
  • 基础概念 - Charlie
  • 什么专业会开设传热学?传热学和流体力学的区别?
  • 牛 CDR3 单抗抗病毒应用:挑战与突破路径
  • 在K8S中,Scheduler 作用及实现原理有哪些?
  • day42
  • 【CANoe】创建和使用UDS服务
  • 8/16暑假总结四
  • GEEPython-demo1:利用Sentinel-2监测北京奥林匹克森林公园2024年NDVI变化(附Python版)
  • 一种FreeSWITCH流量镜像WebSocket音频推流方案
  • 在K8S中,RBAC及其特点(优势)有哪些?
  • DDD-abp学习一
  • 图论03
  • char 和 unsigned char 的区别(解决串口通信中文乱码问题)
  • 嵌入式Linux内核裁剪与移植实战:国产热门RK3568开发板~ - 实践
  • 前端渲染模式
  • zephyr学习: 4.LVGL+LCD显示触摸
  • CSP-S模拟12——类人群星闪耀时
  • pytorch一维向量shape转换
  • HZ CSP-S模拟12
  • windows Server 2019域控管理员密码重置
  • 在K8S中,Secret有何作用?
  • 使用影刀RPA实现快递信息抓取
  • 04_根据不同的值选择不同的执行语句
  • abc419