1. 项目概述:LeetCode 3704与微服务组件的双线解析
这个看似跨界的技术主题实际上包含两个独立但都极具实践价值的内容:算法题解与微服务架构核心组件。前半部分将带您用数学归纳法解决LeetCode 3704这道组合数学难题,后半段则深入剖析微服务体系中注册中心与负载均衡的实现原理,对比主流技术选型。作为同时需要应对算法面试和系统设计的开发者,这种"硬算法+工程实践"的组合正是当前一线大厂考核的典型模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 破解LeetCode 3704:无零数字对的统计逻辑
2.1 题目重述与示例分析
给定整数n,要求统计所有满足以下条件的正整数对(a,b):
- 1 ≤ a ≤ b ≤ n
- 数字a和b的十进制表示均不包含数字0
- a和b的乘积a×b也不包含数字0
当n=3时,有效对为(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)共6个;而n=10时,(5,8)是无效对因为5×8=40含0。
2.2 暴力解法与优化思路
最直接的解法是双层循环遍历所有可能组合:
python复制def is_valid(num):
return '0' not in str(num)
def count_pairs(n):
count = 0
for a in range(1, n+1):
if not is_valid(a):
continue
for b in range(a, n+1):
if is_valid(b) and is_valid(a*b):
count += 1
return count
时间复杂度O(n²),当n≤10⁵时显然不适用。优化方向:
- 预处理所有有效数字(不含0的数)
- 对有效数字建立哈希集合实现O(1)查询
- 利用数学性质剪枝:若a×b>n即可终止内层循环
2.3 数学优化实现
python复制def count_pairs_optimized(n):
valid_nums = [x for x in range(1, n+1) if is_valid(x)]
valid_set
