日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2059. 转化数字的最小运算数(BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個下標從 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 解釋: 可以按 674 的轉化路徑進行,只需執行下述 2 次運算: - 6 ^ 1 = 7 - 7 ^ 3 = 4示例 2: 輸入:nums = [2,4,12], start = 2, goal = 12 輸出:2 解釋: 可以按 21412 的轉化路徑進行,只需執行下述 2 次運算: - 2 + 12 = 14 - 14 - 2 = 12示例 3: 輸入:nums = [3,5,7], start = 0, goal = -4 輸出:2 解釋: 可以按 03-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 解釋: 可以按 0123 的轉化路徑進行,只需執行下述 3 次運算: - 0 + 1 = 1 - 1 + 1 = 2 - 2 + 1 = 3提示: 1 <= nums.length <= 1000 -10^9 <= nums[i], goal <= 10^9 0 <= start <= 1000 start != goal nums 中的所有整數互不相同

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-operations-to-convert-number
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 廣度優先搜索,注意只有在 [ 0, 1000] 范圍內的才能夠進入隊列
class Solution { public:int minimumOperations(vector<int>& nums, int start, int goal) {queue<int> q;vector<int> vis(1001, false);q.push(start);vis[start] = true;int step = 0;while(!q.empty()){int size = q.size();while(size--){int x = q.front();q.pop();for(auto num : nums){if(x+num==goal) return step+1;if(x-num==goal) return step+1;if((x^num)==goal) return step+1;if(x+num>=0 && x+num<=1000 && !vis[x+num]){vis[x+num] = true;q.push(x+num);}if(x-num>=0 && x-num<=1000 && !vis[x-num]){vis[x-num] = true;q.push(x-num);}if((x^num)>=0 && (x^num)<=1000 && !vis[x^num]){vis[x^num] = true;q.push(x^num);}}}step++;}return -1;} };

20 ms 9 MB C++


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

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 2059. 转化数字的最小运算数(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。