网易笔试题。
小红希望最终a是b的倍数或者b是a的倍数。她想知道自己最少的操作次数是多少?
输入2个数a b,其中a,b<=1e9
输出最少的操作次数。
class Solution {
public:
vector<int> t;
vector<vector<int>> ans;
void dfs(int cur, vector<int>& nums) {
if (cur == nums.size()) {
ans.push_back(t);
return;
}
t.push_back(nums[cur]);
dfs(cur + 1, nums);
t.pop_back();
dfs(cur + 1, nums);
}
vector<vector<int>> subsets(vector<int>& nums) {
dfs(0, nums);
return ans;
}
};
int getNum(vector<int>& nums) {
if (nums.size() == 0) return 0;
int res = 0;
for (int i = 0; i < nums.size(); i++) {
res = res * 10 + nums[i];
}
return res;
}
int main() {
vector<int>nums1 = { 1,2,3,4,5 };
vector<int>nums2 = { 9,9,8};
Solution s1,s2;
vector<vector<int>>Nums1 = s1.subsets(nums1);
vector<vector<int>>Nums2 = s2.subsets(nums2);
int len1 = nums1.size(), len2 = nums2.size();
int res = INT_MAX;
for (int i = 0; i < Nums1.size(); i++) {
int num1 = getNum(Nums1[i]);
for (int j = 0; j < Nums2.size(); j++) {
int num2 = getNum(Nums2[j]);
if (num1 == 0 || num2 == 0 || num1 % num2 == 0 || num2 % num1 == 0) {
int count1 = len1 - Nums1[i].size();
int count2 = len2 - Nums2[j].size();
res = min(res, count1 + count2);
}
}
}
cout << res;
return 0;
}