当前位置:首页 > 编程笔记 > 正文
已解决

LeetCode-2103. 环和杆-哈希表(朴素)+位运算

来自网友在路上 190890提问 提问时间:2023-11-07 13:55:04阅读次数: 90

最佳答案 问答题库908位专家为你答疑解惑

Problem: 2103. 环和杆
每日一题

文章目录

  • 思路
    • 哈希表
    • 位运算
  • Code
    • 哈希表
    • 位运算

思路

哈希表

  1. 记录上的颜色。
  2. 由于杆上可能有多条环,导致颜色重复记录,而我们只需要记录杆上颜色种类,设置hashset(唯一颜色)来完成。

位运算

思路来源:ylb

  1. 将环颜色对应位值(如果三种颜色都有(1110)(二进制)==(7)(十进制))
  2. 遍历字符串,位运算
  3. 数组模拟杆编号并记录颜色种类

Code

哈希表


class Solution {
public int countPoints(String rings) {int len = rings.length();int res = 0;Map<Integer, Set<String>> map = new HashMap<>();// 存第i个编号有?种颜色for (int i = 0; i < len - 1; i += 2) {// 取字符串-颜色对String sub = new String(rings.substring(i, i + 2));int num = sub.charAt(1);String color = String.valueOf(sub.charAt(0));if (!map.containsKey(num)) {// 没有该键值对map.put(num, new HashSet<>());}map.get(num).add(color);// 有-存颜色}for (Integer i : map.keySet()) {if (map.get(i).size() == 3) {res++;}}return res;}
}

位运算

class Solution {public int countPoints(String rings) {int[] d = new int['Z'];d['R'] = 1;  // 'R' 对应的位值为 1d['G'] = 2;  // 'G' 对应的位值为 2d['B'] = 4;  // 'B' 对应的位值为 4int[] mask = new int[10];  // 用于存储杆上的颜色种类for (int i = 0, n = rings.length(); i < n; i += 2) {int c = rings.charAt(i);int j = rings.charAt(i + 1) - '0';mask[j] |= d[c];  // 关键!!!位运算}int ans = 0;  // 遍历算结果for (int x : mask) {if (x == 7) {++ans;  // 如果位标记为 7,表示三种颜色的环都有。}}return ans;  }
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"LeetCode-2103. 环和杆-哈希表(朴素)+位运算":http://eshow365.cn/6-34524-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!