【牛客刷题】实现返回最大的不大于n的完美数的函数

文章目录

  • 一、题目介绍
    • 1.1 题目描述
    • 1.2 输入描述
    • 1.3 输出描述
    • 1.4 示例
  • 二、解题思路
    • 2.1 核心算法设计
    • 2.2 性能优化关键
    • 2.3 算法流程图
  • 三、解法实现
    • 3.1 解法一:借位+贪心
      • 3.1.1 初级版本分析
    • 3.2 解法二:优化版(推荐)
      • 3.2.1 优化版本分析
  • 四、总结与拓展
    • 4.1 关键优化技术
    • 4.2 进阶优化方向
    • 4.3 应用场景扩展

一、题目介绍

1.1 题目描述

给定一个正整数n,定义一个完美数为每一位数字只包含1、2、3的十进制数。设计一个函数f(n),返回最大的不超过n的完美数。

1.2 输入描述

  • 第一行:测试用例数T(1 ≤ T ≤ 10)
  • 接下来T行:每行一个正整数n(1 ≤ n ≤ 10¹⁸)

1.3 输出描述

对于每个测试用例,输出f(n)的值

1.4 示例

输入
4
213
3244
22
100

输出
213
3233
22
33

说明

  • f(213)=213(213本身就是完美数)
  • f(3244)=3233(3233是最大的不超过3244的完美数)
  • f(22)=22(22是完美数)
  • f(100)=33&

你可能感兴趣的:(牛客刷题,java,算法,牛客)