leetcode 第180场周赛

5307. 将整数转换为两个无零整数的和

「无零整数」是十进制表示中 不含任何 0 的正整数。

给你一个整数 n,请你返回一个 由两个整数组成的列表 [A, B],满足:

A 和 B 都是无零整数
A + B = n
题目数据保证至少有一个有效的解决方案。

class Solution(object):
    def getNoZeroIntegers(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        def check(num):
            for i in str(num):
                if i == "0":
                    return False
            return True
        arr = []
        for i in range(n):
            if check(i):
                if check(n-i):
                    return [i,n-i]

5308. 或运算的最小翻转次数

给你三个正整数 a、b 和 c。

你可以对 a 和 b 的二进制表示进行位翻转操作,返回能够使按位或运算 a OR b == c 成立的最小翻转次数。

「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。

每一位进行对比,如果c一位是1那我们只需要确定a,b对应位中任意一个为1,如果c一位是0那我们需要确定a,b对应位都为0

class Solution(object):
    def minFlips(self, a, b, c):
        """
        :type a: int
        :type b: int
        :type c: int
        :rtype: int
        """
        ans = 0
        while a or b or c:
            if c%2==1:
                ans += (a|b)%2 == 0
            else:
                ans += a%2!=0
                ans += b%2!=0
            
            a//=2
            b//=2
            c//=2
        return ans

5309. 连通网络的操作次数

用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。

网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。

给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回 -1 。

class Solution(object):
    def makeConnected(self, n, connections):
        """
        :type n: int
        :type connections: List[List[int]]
        :rtype: int
        """
        if len(connections) < n-1:
            return -1
        edge = [[] for i in range(n)]
        for (a,b) in connections:
            edge[a].append(b)
            edge[b].append(a)
        vis = [0]*n
        def dfs(x):
            if vis[x]:
                return 
            vis[x] = 1
            for out in edge[x]:
                dfs(out)

        ans = 0
        for i in range(n):
            if not vis[i]:
                ans += 1
                dfs(i)
        return ans-1

你可能感兴趣的:(leetcode 第180场周赛)