LeetCode 1088. 易混淆数 II(回溯/BFS)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 回溯
      • 2.2 BFS

1. 题目

本题我们会将数字旋转 180° 来生成一个新的数字。

比如 0、1、6、8、9 旋转 180° 以后,我们得到的新数字分别为 0、1、9、8、6。

2、3、4、5、7 旋转 180° 后,是 无法 得到任何数字的。

易混淆数(Confusing Number)指的是一个数字在整体旋转 180° 以后,能够得到一个和原来 不同 的数,且新数字的每一位都应该是有效的。(请注意,旋转后得到的新数字可能大于原数字)

给出正整数 N,请你返回 1 到 N 之间易混淆数字的数量

示例 1:
输入:20
输出:6
解释:
易混淆数为 [6,9,10,16,18,19]6 转换为 9
9 转换为 6
10 转换为 01 也就是 1
16 转换为 91
18 转换为 81
19 转换为 61示例 2:
输入:100
输出:19
解释:
易混淆数为 [6,9,10,16,18,19,60,61,66,68,80,81,86,89,90,91,98,99,100]。提示:
1 <= N <= 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/confusing-number-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 1056. 易混淆数(哈希)

2.1 回溯

class Solution {vector<int> ch = {0,1,6,8,9};int sum = 0;
public:int confusingNumberII(int N) {vector<int> s = {1,6,8,9};for(int i = 0; i < s.size(); i++)dfs(s[i], N);return sum;}void dfs(long long n, int N) {if(n > N)return;if(isok(n))sum++;for(int i = 0; i < ch.size(); i++)dfs(n*10+ch[i], N);}bool isok(long long n){long long num = 0, bit, origin = n;while(n){bit = n%10;n /= 10;if(bit==6) bit = 9;else if(bit== 9) bit = 6;num = num * 10 + bit;}return num != origin;}
};

2.2 BFS

class Solution {
public:int confusingNumberII(int N) {queue<long long> q;vector<int> ch = {0,1,6,8,9};q.push(1);q.push(6);q.push(8);q.push(9);int sum = 0;while(!q.empty()){long long n = q.front();q.pop();if(isok(n) && n <= N)sum++;for(int i = 0; i < ch.size(); i++){if(n*10+ch[i] <= N)q.push(n*10+ch[i]);}}return sum;}bool isok(long long n){long long num = 0, bit, origin = n;while(n){bit = n%10;n /= 10;if(bit==6) bit = 9;else if(bit== 9) bit = 6;num = num * 10 + bit;}return num != origin;}
};

468 ms 40.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

python——import导入模

1.import 搜索路径 import sys sys.path 路径搜索 从上⾯列出的⽬录⾥依次查找要导⼊的模块⽂件 表示当前路径 程序执⾏时导⼊模块路径 sys.path.append(/home/itcast/xxx) sys.path.insert(0, /home/itcast/xxx) #可以确保先搜索这个路径 I…

timer.schedule定时器用法

Timer是一种定时器工具&#xff0c;用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask一个抽象类&#xff0c;它的子类代表一个可以被Timer计划的任务。 schedule的意思&#xff08;时间表、进度表&#xff09; timer.schedule(new MyTas…

LeetCode 759. 员工空闲时间(排序)

文章目录1. 题目2. 解题1. 题目 给定员工的 schedule 列表&#xff0c;表示每个员工的工作时间。 每个员工都有一个非重叠的时间段 Intervals 列表&#xff0c;这些时间段已经排好序。 返回表示 所有 员工的 共同&#xff0c;正数长度的空闲时间 的有限时间段的列表&#xf…

python——作用域 == is

作⽤域 test.py num 200 def print_num(): print("----print_num func, num%d----"%num) main.py from test import * num 100 def print_num2(): print("----print_num2 func, num%d----…

U-Boot-2009-03移植笔记(移植准备)

因为工作需要&#xff0c;需要在S3C2440板子上移植U-boot和Linux&#xff0c;虽然关于S3c2440移植的文章比较多&#xff0c;但是毕竟全面的不多&#xff0c;而且都是别人的&#xff0c;这次自己动手&#xff0c;以此系列记录全过程。 U-boot1.1.6中有支持smdk2410的代码&#x…

LeetCode 656. 金币路径(DP)

文章目录1. 题目2. 解题1. 题目 给定一个数组 A&#xff08;下标从 1 开始&#xff09;包含 N 个整数&#xff1a;A1&#xff0c;A2&#xff0c;……&#xff0c;AN 和一个整数 B。 你可以从数组 A 中的任何一个位置&#xff08;下标为 i&#xff09;跳到下标 i1&#xff0c;i…

python中的深浅拷贝

1. 浅拷贝 copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是&#xff1a;拷贝了引⽤&#xff0c;并没有拷贝内容 浅拷贝只复制第一层数据&#xff0c;更深层的引用不管。 2. 深拷贝 copy.deepcopy 深拷贝是对于⼀个对象所有层次的拷贝(递归) 、 3. 注意点浅…

邻接矩阵的深度优先遍历

废话不多说&#xff0c;直接看代码 t#include<stdio.h> #include<stdlib.h> #include<string.h> #define INFINITY INT_MAX #define MAX_VERTEX_NUM 20 bool visted[MAX_VERTEX_NUM]; typedef char VertexType; typedef int VRType; typedef int QElemT…

Linux中使用GDB调试NS2

在使用ns2过程中&#xff0c;避免不了要修改或者添加一些模块&#xff0c;对C代码进行改动。编写好自己的功能模块以后&#xff0c;进行编译执行。但通常不会这么容易通过&#xff0c;经常会出现编译可以通过&#xff0c;但执行是会出错。比较常见的是“段错误”&#xff0c;因…

LeetCode 291. 单词规律 II(回溯)

文章目录1. 题目2. 解题1. 题目 给你一种规律 pattern 和一个字符串 str&#xff0c;请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循&#xff0c;例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间&#xff0c;存在着双向连接的对应规律。 示例1:…

python中的可迭代对象

迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 1. 可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语…

二叉排序树删除子节点以及遍历

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n; typedef struct BiTNode {//树节点的建立 TElemType data ;struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int SearchBST(BiTree T,int key,BiTree f,BiTr…

LeetCode 1548. The Most Similar Path in a Graph(动态规划)

文章目录1. 题目2. 解题1. 题目 We have n cities and m bi-directional roads where roads[i] [ai, bi] connects city ai with city bi. Each city has a name consisting of exactly 3 upper-case English letters given in the string array names. Starting at any city…

UAC执行批处理,进行提示

很简单&#xff0c;直接在批处理文件中前面加入下面这段 echo off:: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system…

python中的iter()函数与next()函数

list、tuple等都是可迭代对象&#xff0c;我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使⽤next()函数来获取下⼀条数据。iter()函数实际上就是调⽤了可迭代对象的 __iter__ ⽅法。 >>> li [11, 22, …

vs.net打包生成可执行文件的方法

用vs.net对应用打包:1.打开VS.NET开发环境;2."文件"->"新建"->"项目";3."项目类型"选"安装和部署项目","模板"选"Web安装项目",然后填写"名称"和"位置",最后"确定"…

LeetCode 358. K 距离间隔重排字符串(贪心+优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个非空的字符串 s 和一个整数 k&#xff0c;你要将这个字符串中的字母进行重新排列&#xff0c;使得重排后的字符串中相同字母的位置间隔距离至少为 k。 所有输入的字符串都由小写字母组成&#xff0c;如果找不到距离至少为 k 的重排结果…

python中的迭代器Iterator

迭代器是⽤来帮助我们记录每次迭代访问到的位置&#xff0c;当我们对迭代器使⽤next()函数的时候&#xff0c;迭代器会向我们返回它所记录位置的下⼀个位置的数据。实际上&#xff0c;在使⽤next()函数的时候&#xff0c;调⽤的就是迭代器对象的 __next__ ⽅法&#xff08…

建立一颗二叉排序树,并删除该二叉排序树上的某个节点

设计并验证如下算法&#xff1a;而擦函数采用二叉链表结构表示&#xff0c;按输入的关键字序列建立一颗二叉排序树&#xff0c;并删除该二叉排序树上的某个节点。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n…

LeetCode 1153. 字符串转化(哈希)

文章目录1. 题目2. 解题1. 题目 给出两个长度相同的字符串&#xff0c;分别是 str1 和 str2。请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化后变成字符串 str2。 每一次转化时&#xff0c;将会一次性将 str1 中出现的 所有 相同字母变成其他 任何 小写英文字母&#x…