牛客刷题记录5

题1:质数因子

java 复制代码
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        long num = in.nextLong();
        long sq = (long)Math.sqrt(num);

        for (int i = 2; i <= sq; i++) {
            while(num % i == 0) {
                System.out.print(i + " ");
                num = num / i;
            }
        }


        //最后还要判断一下是否能除到1
        System.out.print(num == 1 ? "" : num + "");

        in.close();
    }
}

题2:合并区间

java 复制代码
import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 *   public Interval(int start, int end) {
 *     this.start = start;
 *     this.end = end;
 *   }
 * }
 */



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals Interval类ArrayList 
     * @return Interval类ArrayList
     */
    public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
        // write code here
        if (intervals == null || intervals.size() <= 1) {
            return intervals;
        }

        //处理开始
        Collections.sort(intervals, new Comparator<Interval> () {
            @Override
            public int compare (Interval a, Interval b) {
                return Integer.compare(a.start, b.start);
            }
        });


        ArrayList<Interval> result = new ArrayList<Interval>();

        //对要处理的list进行处理,如果最终result这个list中是空的或者当前的对象起点大于上一个的终点那么直接填充就行
        for (int i = 0; i < intervals.size(); i++) {
            Interval current = intervals.get(i);
            if (result.isEmpty() || result.get(result.size() - 1).end < current.start) {
                result.add(current);
            } else {
                //否则就将上一个的终点与当前终点比较取最大的值即可
                result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, current.end);
            }
        }

        return result;

    }
}

题3:大数加法

  • 难点主要是数值太大会超过Long型数据,所以使用BigInteger数据类型来解决就行
java 复制代码
import java.util.*;
import java.math.*;
 
public class Solution {
    /**
     *代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {

        BigInteger a = new BigInteger(s);
        BigInteger b = new BigInteger(t);

        return a.add(b).toString();
    }
}

题4:二叉树根节点到叶子节点的所有路径和

  • 这种链式存储结构的处理我还是更习惯用c语言来解题
c 复制代码
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型
 */
#include <stdbool.h>
int sumNumbers(struct TreeNode* root ) {
    // write code here
    return preorder(root, 0);
}

int preorder(struct TreeNode* root, int sum) {
    if(root == NULL) {
        return NULL;
    }

    sum = sum *10 + root->val;
    if (root->left == NULL &&  root -> right == NULL) {
        return sum;
    }

    return preorder(root -> left, sum) + preorder(root -> right,  sum);
}

题5: 二叉树中和为某一值的路径(二)

java 复制代码
import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {

    ArrayList<ArrayList<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new  LinkedList<>();

    public void dps (TreeNode root, int target) {
        if(root == null) {return;}

        path.add(root.val);

        target -= root.val;

        if(root.left == null && root.right == null && target == 0) {
            result.add(new ArrayList<>(path));
        }

        dps(root.left, target);
        dps(root.right,target);
        path.removeLast();

    }

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param target int整型 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> FindPath (TreeNode root, int target) {
        // write code here
        dps(root,target);
        return result;
    }
}
相关推荐
夏幻灵2 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
敬往事一杯酒哈4 小时前
海康 AGV 导航读码器学习
学习
bkspiderx4 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
代码什么用4 小时前
Spring基础使用
java·后端·spring
程序员老陆4 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光4 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
信奥卷王5 小时前
[GESP202609 六级] 分树规划
算法
Su米苏5 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
夏幻灵5 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表