3.8 VIVO笔试题
第一题,生产手机数目,AC
class Solution: def solution(self , n ): # write code here dp = [0] * (n+1) dp[1] = 1 cur = 2 for i in range(2, n+1): for j in range(i): dp[cur + j] = i if cur+j >= n: break cur += i if cur > n: print(cur) break return sum(dp)第二题,找出每位乘积等于N的最小数,过了70%
class Solution: def solution(self , n ): # write code here if n < 10: return 10 + n else: if self.is_zhishu(n): return -1 else: yinzi = [2, 3, 5, 7] tmp = [] while(n != 1): for i in yinzi: if n % i == 0: n /= i tmp.append(i) break elif i == 7 and n % i != 0: return -1 res = [] cur = 1 for i in tmp: if cur * i < 10: cur *= i continue else: res.append(cur) cur = i res.append(cur) res.sort() answer = 0 w = len(res)-1 for i in res: answer += i * (10 ** w) w -= 1 return answer def is_zhishu(self, n: int)->bool: for i in range(2, n // 2): if n % i == 0: return False return True第三题,相当于找出连接n次的数目,应该动态规划,时间不够了
class Solution: def solution(self , m , n ): table = [5, 7, 8] # write code here dp = [0] * (n + 2) dp[1] = 9 dp[2] = 56 dp[3] = 20 * table[0] + 28 * table[1] + 8 * table[2] if n <= 3: return sum(dp[m: n+1]) else: pass s = Solution() res = s.solution(1, 2) print(res)