牛客刷题记录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();

        
    }
}
相关推荐
Dlrb121125 分钟前
C语言-指针数组与数组指针
c语言·数据结构·算法·指针·数组指针·指针数组·二级指针
WL_Aurora27 分钟前
Python 算法基础篇之集合
python·算法
平行侠39 分钟前
A15 工业路由器IP前缀高速检索与内存压缩系统
网络·tcp/ip·算法
阿旭超级学得完2 小时前
C++11包装器(function和bind)
java·开发语言·c++·算法·哈希算法·散列表
li星野2 小时前
位运算 & 数学 & 高频进阶九题通关(Python + C++)
c++·python·学习·算法
jerryinwuhan2 小时前
hello算法,简单讲(1)
算法·排序算法
y = xⁿ2 小时前
20天速通LeetCodeday15:BFS广度优先搜索
算法·宽度优先
400分2 小时前
吃透RAG核心-----语义检索与关键字检索底层原理
算法·架构
目黑live +wacyltd2 小时前
算法备案:常见驳回原因与应对策略
人工智能·算法
磊 子3 小时前
多态类原理+四种类型转换+异常处理
开发语言·c++·算法