2059. 转化数字的最小运算数

给你一个下标从 0 开始的整数数组 nums ,该数组由 互不相同 的数字组成。另给你两个整数 start 和 goal 。

整数 x 的值最开始设为 start ,你打算执行一些运算使 x 转化为 goal 。你可以对数字 x 重复执行下述运算:

如果 0 <= x <= 1000 ,那么,对于数组中的任一下标 i(0 <= i < nums.length),可以将 x 设为下述任一值:

x + nums[i]
x - nums[i]
x ^ nums[i](按位异或 XOR)
注意,你可以按任意顺序使用每个 nums[i] 任意次。使 x 越过 0 <= x <= 1000 范围的运算同样可以生效,但该该运算执行后将不能执行其他运算。

返回将 x = start 转化为 goal 的最小操作数;如果无法完成转化,则返回 -1 。

示例 1:输入:nums = [1,3], start = 6, goal = 4
输出:2
解释:
可以按 6 → 7 → 4 的转化路径进行,只需执行下述 2 次运算:
- 6 ^ 1 = 7
- 7 ^ 3 = 4示例 2:输入:nums = [2,4,12], start = 2, goal = 12
输出:2
解释:
可以按 2 → 14 → 12 的转化路径进行,只需执行下述 2 次运算:
- 2 + 12 = 14
- 14 - 2 = 12示例 3:输入:nums = [3,5,7], start = 0, goal = -4
输出:2
解释:
可以按 0 → 3 → -4 的转化路径进行,只需执行下述 2 次运算:
- 0 + 3 = 3
- 3 - 7 = -4
注意,最后一步运算使 x 超过范围 0 <= x <= 1000 ,但该运算仍然可以生效。示例 4:输入:nums = [2,8,16], start = 0, goal = 1
输出:-1
解释:
无法将 0 转化为 1示例 5:输入:nums = [1], start = 0, goal = 3
输出:3
解释:
可以按 0 → 1 → 2 → 3 的转化路径进行,只需执行下述 3 次运算:
- 0 + 1 = 1
- 1 + 1 = 2
- 2 + 1 = 3

提示:

  • 1 <= nums.length <= 1000
  • −109-10^9−109 <= nums[i], goal <= 10910^9109
  • 0 <= start <= 1000
  • start != goal
  • nums 中的所有整数互不相同

解题思路

利用队列完成广度优先搜索,并且使用set记录已经遍历过的元素,每次对于x进行如下操作

  • x + nums[i]
  • x - nums[i]
  • x ^ nums[i](按位异或 XOR)
    再将结果加入到队列里面,当运算结果越过 0 <= x <= 1000 范围,那么就不将其加入队列当中。

代码

class Solution {public:int minimumOperations(vector<int> nums, int start, int goal) {queue<int> q;int d(1);q.push(start);unordered_set<int> s{start};while (q.size() != 0) {int len=q.size();for (int i = 0; i < len; ++i) {int  cur=q.front();q.pop();for (auto n:nums){if (goal==n+cur)return d;if (goal==cur-n)return d;if (goal==(cur^n))return d;if (cur+n<=1000&&cur+n>=0&&s.find(cur+n)==s.end()){q.push(cur+n);s.insert(cur+n);}if (cur-n<=1000&&cur-n>=0&&s.find(cur-n)==s.end()){q.push(cur-n);s.insert(cur-n);}if ((cur^n)<=1000&&(cur^n)>=0&&s.find(cur^n)==s.end()){q.push(cur^n);s.insert(cur^n);}}}d++;}return -1;}
};

2059. 转化数字的最小运算数相关推荐

  1. 【解题报告】Leecode 2059. 转化数字的最小运算数

    题目链接:https://leetcode-cn.com/problems/minimum-operations-to-convert-number/ 题解汇总:https://zhanglong.b ...

  2. LeetCode 2059. 转化数字的最小运算数(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums ,该数组由 互不相同 的数字组成.另给你两个整数 start 和 goal . 整数 x 的值最开始设为 s ...

  3. 平安科技:传入一个只包含1-9的数字字符串,输出的是包含所有数字的最小整数

    平安科技秋招笔试题: 传入一个只包含1-9的数字字符串,输出的是包含所有数字的最小整数.比如:输入"1992212",输出129. 实例: 输入 1992212 输出 129 思路 ...

  4. java中输出5个数_编写一个程序,要求用户输入5个数字,并输出这些数字中最大的数字和这些数字中最小的数字...

    编写一个程序,要求用户输入5个数字,并输出这些数字中最大的数字和这些数字中最小的数字 . 因此,例如,如果用户键入数字2456 457 13 999 35,则输出将如下所示:最大数字是2456,最小数 ...

  5. 怎么把html格式转换成数字,Excel文本格式怎么转化成数字格式 excel文本转化数字格式教程...

    怎么将excel表格中的文本转化为数字格式呢?我们在使用excel表格的时候,数字格式的数据会更方便用户编辑,所以很多用户都会选择把文本格式转换为数字格式,具体如何操作大家请看下方的excel文本转化 ...

  6. 编程练习:数字矩阵路径数字和最小

    给定一个数字矩阵,试找出一条从左上角到右下角的一条路径,要求路径上的数字和最小. 思路一: 使用动态规划思想,用当前路径最小数字和替换原来位置上的数据,直至到达右下角 /***Copyright @ ...

  7. oracle数值型转为char类型,PLSQL: Oracle函数to_char转化数字型指定小数点位数的技巧...

    问题题出:                 数字 0.023 => 转化成字符串 "0.023"问题难点:to_char,函数功能,就是将数值型或者日期型转化为字符型. 比如 ...

  8. java 时间 转化成数字_java时间转化数字

    1 写出下面代码输出内容. package main import (    "fmt" ) funcmain() {     defer_call() } funcdefer_c ...

  9. java 1亿个数字中_求一亿个数字里面最小的10个数字

    package com.yuzhiyun;import java.util.Arrays;/** * 求一亿个数里面最小的10个数 * 首先建立节点个数为10的最大堆,然后考虑每一个新的值,让他和堆顶 ...

最新文章

  1. 自然语言推理和数据集
  2. 区块链,使用 Go-Ethereum 搭建以太坊私有链
  3. BZOJ 1602: [Usaco2008 Oct]牧场行走 倍增裸题
  4. java ee cdi_Java EE CDI依赖关系消歧示例
  5. 信号与系统 chapter9 关于信号与系统中微分方程的求解
  6. MySQL中外键的定义、作用、添加和删除
  7. 【计算机网络复习 物理层】2.3 物理层设备
  8. linux php 添加gd,linux(centos)下为php添加添加GD扩展
  9. 生日快乐程序员的浪漫代码_python告白代码,只属于程序员的浪漫
  10. layui分页只能显示一页数据_分页显示查询数据
  11. npm install vs. update - 有什么区别?
  12. python面向对象(其二)
  13. testNg官方文档
  14. nginx跨域配置、使用,docker部署nginx全流程(实测简单完整无坑)
  15. 【C++STL库】stack常用函数学习
  16. 建立windows文件夹快捷方式
  17. android内核调试
  18. [Android] android 实现加速小火箭动画效果 位移+透明渐变 动画
  19. How to make a Speech Machine
  20. 条码打印软件如何使用Excel表批量打印条码标签

热门文章

  1. 二分(三分)+快速幂
  2. 1106 Lowest Price in Supply Chain (25)
  3. 你知道如何用面向对象思想写好并发编程吗?
  4. 直接上干货!技术水平真的很重要!复习指南
  5. redis的源码编译安装+发布订阅+RDB持久化
  6. 【原创】数据库中为什么不推荐使用外键约束
  7. C#中的equals()和==
  8. 基于ssm框架和freemarker的商品销售系统
  9. Python网络编程之TCP服务器客户端(二)
  10. 灵动标签调用友情链接