给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。
假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True;否则请返回 False。
示例 1: 输入:nums = [12,5,7,23] 输出:true 解释:挑选数字 5 和 7。 5*3 + 7*(-2) = 1 示例 2: 输入:nums = [29,6,10] 输出:true 解释:挑选数字 29, 6 和 10。 29*1 + 6*(-3) + 10*(-1) = 1 示例 3: 输入:nums = [3,6] 输出:false 提示: 1 <= nums.length <= 10^5 1 <= nums[i] <= 10^9来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/check-if-it-is-a-good-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
436 ms 44 MB
再看答案:裴蜀定理
求所有数字的最大公约数,需要为1才可以 class Solution { public: bool isGoodArray(vector<int>& nums) { int g = nums[0]; for(int i = 1; i < nums.size(); ++i) { g = __gcd(g, nums[i]); } return g == 1; } }; class Solution { public: bool isGoodArray(vector<int>& nums) { int g = nums[0]; for(int i = 1; i < nums.size(); ++i) { g = gcd(g, nums[i]); } return g == 1; } int gcd(int a, int b) { int r; while(b) { r = a%b; a = b; b = r; } return a; } };我的博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!