找数字


dfs搜索:

代码如下:


import java.util.Scanner;

public class _找数字 {
    static int n;
    static boolean ok;
    static void dfs(long x,int cnt){
        if(cnt>=19)
            return;
        if(ok)
            return;
        if(x%n==0){
            ok=true;
            System.out.println(x);
            return;
        }
        dfs(x*10+0,cnt+1);
        dfs(x*10+1,cnt+1);
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        dfs(1,0);
    }
}

 

### 关于华为OD模式下的数字算法题 在华为OD机试中,涉及“数字”的算法题目通常会考察考生对于数组操作、字符串处理以及特定数据结构的应用能力。以下是基于已有资料整理的一类典型的“数字”问题描述: #### 题目描述 给定一个长度为 `n` 的整数数组 `nums` 和一个目标值 `target`,要求出数组中两个不同位置上的数字之和等于目标值的所有组合,并返回这些组合的索引对。如果不存在这样的组合,则返回空列表。 具体要求如下: 1. 数组可能包含重复元素。 2. 返回的结果应不包含重复的组合。 3. 如果存在多个满足条件的组合,需全部列出。 4. 时间复杂度尽可能低。 示例输入输出说明: - 输入:`nums = [2, 7, 11, 15], target = 9` - 输出:`[[0, 1]]` 解释:`nums[0] + nums[1] = 2 + 7 = 9`,因此返回其索引 `[0, 1]`[^1]。 --- #### 解决方案概述 此类问题可以通过哈希表来高效解决。核心思想是利用字典存储已经遍历过的数值及其对应的索引,在后续遍历时快速判断是否存在符合条件的目标差值。这种方法的时间复杂度可以达到 O(n),空间复杂度也为 O(n)。 ```python def two_sum(nums, target): result = [] seen = {} for i, num in enumerate(nums): complement = target - num if complement in seen: result.append([seen[complement], i]) seen[num] = i return result ``` 上述代码实现了两数之和的功能,能够有效应对大多数场景需求。 --- #### 可能的变化形式 除了基本的两数之和外,“数字”类型的题目还可能出现以下变种: 1. **三数之和**:扩展至三个数相加为目标值的情况。 2. **最接近目标值的子序列**:到任意数量的数字使其总和最接近目标值。 3. **无序数组中的最大/最小乘积**:从数组中选取若干个数字计算它们的最大或最小乘积。 这些问题均可以在基础版本的基础上进一步演化和发展[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值