牛客刷题记录1

题1:坐标求和

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

class Solution {
    public long sumSelected(long[][] matrix, List<int[]> coords) {
        long total = 0;
        for (int[] opt : coords) {
            total += matrix[opt[0]][opt[1]];
        }
        return total;
    }
}


public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        if(!sc.hasNextInt())
            break;
        int m = sc.nextInt();
        if(!sc.hasNextInt())
            break;
        int n = sc.nextInt();

        long[][] matrix = new long[m][n];

        //注意这里不能用while  因为后面还有输入  直接进入死循环
        // while(sc.hasNextInt()) {
        //     for (int i = 0; i < m; i++) {
        //         for (int j = 0; j < n; j++) {
        //             matrix[i][j] = sc.nextLong();
        //         }
        //     }
        // }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = sc.nextLong();
            }
        }

        if(!sc.hasNextInt())
            break;
        int q = sc.nextInt();

        List<int[]> list = new ArrayList<>(q);
        while(sc.hasNextInt()) {
            for (int i = 0; i < q; i++) {
                int r = sc.nextInt();
                int c = sc.nextInt();

                list.add(new int[] {r, c});
            }
        }

        System.out.println(solution.sumSelected(matrix, list));
        
    }
    sc.close();
}

题2:坐标移动

正则表达式好用!

  • [abc] - 匹配 a、b 或 c 中的一个字母 测验
  • [a-z] - 匹配 a 到 z 中的一个字母 测验
  • [^abc] - 匹配除了 a、b 或 c 中的其他字母测验
  • {n} - 匹配 n测验
  • {n,} - 匹配 n 次以上 测验
  • {m ,n} - 最少 m 次,最多 n 次匹配 测验
java 复制代码
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        //输入处理,并对字符进行分割
        Scanner sc = new Scanner(System.in);
        String[] in = sc.nextLine().split(";");


        //设置坐标原始值
        int x = 0;
        int y = 0;

        //对分割之后的每个字符进行处理
        for (String s : in) {
            //对字符进行匹配,因为最多两位数,所以就最少匹配1次,最多匹配2次
            if (!s.matches("[WASD][0-9]{1,2}")) {
                continue;
            }
            //截取数字部分并转换为整数
            int step = Integer.valueOf(s.substring(1));
            //对第一位字符进行方向匹配,并做对应的移动
            switch (s.charAt(0)) {
                case 'W':
                    y += step;
                    break;
                case 'S':
                    y -= step;
                    break;
                case 'A':
                    x -= step;
                    break;
                case 'D':
                    x += step;
                    break;
            }
        }
        //输出结果
        System.out.println(x + "," + y);
        //关闭scanner
        sc.close();

        
    }
}
相关推荐
To_OC7 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia19 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
zephyr0511 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米12 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚13 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结13 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_14 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
Tisfy14 小时前
LeetCode 3867.数对的最大公约数之和:按题目说的做(gcd)
算法·leetcode·题解·模拟·最大公约数·gcd
泷寂14 小时前
最小生成树 (MST基础)
算法
Daniel_12314 小时前
数组——总结篇
算法