使用BFS搜索每一次操作后的数字以及操作数即可。要注意这道题截止卡的比较死,如果num>m+(abs(m-n))就没有操作的价值了,因为还不如从n一步一步加或减到m。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 表示牛牛的数字 * @param m int整型 表示牛妹的数字 * @return int整型 */ //BFS搜索 int solve(int n, int m) { map<int, int> mp; mp.clear(); // write code here queue<int> q; q.push(n); mp[n] = 0; while (q.size()) { int num = q.front(); q.pop(); if (num==m) { return mp[num]; } if (num>m+(abs(m-n))) { continue; } int temp = num-1; if (mp.find(temp)==mp.end()) { q.push(temp); mp[temp] = mp[num]+1; } temp = num+1; if (mp.find(temp)==mp.end()) { q.push(temp); mp[temp] = mp[num]+1; } temp = num*num; if (mp.find(temp)==mp.end()) { q.push(temp); mp[temp] = mp[num]+1; } } return -1; } };