二进制算法题+回文链表

news/2025/3/29 18:16:09/

文章目录

  • 一、剑指 Offer II 002. 二进制加法
  • 二、693. 交替位二进制数
  • 三、剑指 Offer 15. 二进制中1的个数
  • 四、剑指 Offer II 027. 回文链表
  • 总结


一、剑指 Offer II 002. 二进制加法

  1. 先计算两个字符串公共的部分,需要维护三个变量:两个数组的指针idx+一个进位变量up
  2. 注意,这里用StringBuffer来存储结果,先存储的是个位,所以最后需要reverse一下。
    public String addBinary(String a, String b) {char[] ca = a.toCharArray();char[] cb = b.toCharArray();// for(int i=ca.length-1;i>=0;i--){//     int sum = ca[i]+cb[i];//     if(sum>1){//     }// }int idxa = ca.length-1;int idxb = cb.length-1;int up=0;StringBuffer sb = new StringBuffer();//用来记录最终结果while(idxa>=0&&idxb>=0){//先计算公共的部分int val = (ca[idxa]-'0')+(cb[idxb]-'0')+up;sb.append(val%2);up=val/2;idxa--;idxb--;}while(idxa>=0){int val = (ca[idxa]-'0')+up;sb.append(val%2);up=val/2;idxa--;}while(idxb>=0){int val = (cb[idxb]-'0')+up;sb.append(val%2);up=val/2;idxb--;}if(up==1){sb.append("1");}return sb.reverse().toString();}

21分钟

二、693. 交替位二进制数

  1. 如何看一个字符是否在变化?维护一个temp变量来记录他上一次的结果。
  2. 模拟十进制转二进制:先对2求余得到低位,再除以2得到下一个数。
    public boolean hasAlternatingBits(int n) {int temp=-1;while(n>0){int wei = n%2;if(wei==temp){return false;}temp=wei;n=n/2;}return true;}

10分钟

三、剑指 Offer 15. 二进制中1的个数

  • 自己看到题目的第一想法

  • 看完题解之后的想法

  • 自己实现过程中遇到的问题总结

    public int hammingWeight(int n) {// String s = String.valueOf(n);String s = Integer.toBinaryString(n);int num=0;for(int i=0;i<s.length();i++){if(s.charAt(i)=='1'){num++;}}return num;}

29分钟

四、剑指 Offer II 027. 回文链表

  1. 链表无法双指针遍历,所以先反转后半段链表(这里需要先知道中心点)。
  2. 有几个地方需要注意:1.如果是奇数节点,需要中心点向后移动一位。2.判断回文的终止条件是右指针为空。
    public boolean isPalindrome(ListNode head) {ListNode slow = head;ListNode fast = head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}//先找到中心点// if(fast!=null){//     fast=fast.next;// }if(fast!=null){slow=slow.next;}ListNode right = reverse(slow);ListNode left=head;// while(left!=null&&right!=null){while(right!=null){if(left.val!=right.val){return false;}left=left.next;right=right.next;}return true;}public ListNode reverse(ListNode head){ListNode pre = null;ListNode cur = head;while(cur!=null){ListNode next = cur.next;cur.next=pre;pre = cur;cur=next;}return pre;}

总结


http://www.ppmy.cn/news/109880.html

相关文章

【探索】机器指令翻译成 JavaScript

前言 前些时候研究脚本混淆时&#xff0c;打算先学一些「程序流程」相关的概念。为了不因太枯燥而放弃&#xff0c;决定想一个有趣的案例&#xff0c;可以边探索边学。 于是想了一个话题&#xff1a;尝试将机器指令 1:1 翻译 成 JavaScript&#xff0c;这样就能在浏览器中&am…

Java使用Spark进行数据转换的常用方法和案例

目录 Java使用Spark进行数据转换的常用方法和案例数据转换方法mapfilterreducejoinflatMapgroupByKeyreduceByKeysortByKeyuniondistinctsample 数据转换案例单词计数排序分组 总结 Java使用Spark进行数据转换的常用方法和案例 Apache Spark是一个快速、通用的大数据处理引擎&…

C++11 -- 包装器

文章目录 function包装器function包装器的概念function的运用function实例化使用function解决逆波兰表达式 bind包装器bind包装器相关介绍bind绑定函数固定参数 function包装器 function包装器的概念 function包装器,也叫做适配器,它的本质是一个类模板. 例如: 1 template&l…

微服务Spring Cloud 02------使用Eureka实现注册中心(1)

1.Eureka简介 Eureka是Spring Cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)和P(分区容错性)。 Eureka是Netflix中的一个开源框架。它和 Zookeeper、Consul一样&#xff0c;都是用于服务注册管理的&#xff0c;同样&#xff0c;Spring-Cloud 还集成了Zo…

《Java并发编程实战》课程笔记(四)

互斥锁 原子性问题到底该如何解决呢&#xff1f; “同一时刻只有一个线程执行”这个条件非常重要&#xff0c;我们称之为互斥。如果我们能够保证对共享变量的修改是互斥的&#xff0c;那么&#xff0c;无论是单核 CPU 还是多核 CPU&#xff0c;就都能保证原子性了。 锁模型 …

Python中的魔法函数

魔法函数&#xff08;Magic functions&#xff09;&#xff0c;也称为特殊方法&#xff08;Special methods&#xff09;&#xff0c;是在 Python 中具有特殊名称和双下划线&#xff08;__&#xff09;前缀和后缀的特殊函数。 这些魔法函数允许您定义自定义行为&#xff0c;以…

RocketMQ的demo代码

下面是一个使用Java实现的RocketMQ示例代码&#xff0c;用于发送和消费消息&#xff1a; 首先&#xff0c;您需要下载并安装RocketMQ&#xff0c;并启动NameServer和Broker。 接下来&#xff0c;您可以使用以下示例代码来发送和消费消息&#xff1a; Producer.java文件&…

SpringBoot自动配置原理总结

1、我们需要从主启动类的SpringBootApplication注解开始分析&#xff1a; SpringBootApplication是一个复合注解&#xff0c;进入以后看到主要包括以下三个注解&#xff1a; SpringBootConfiguration EnableAutoConfiguration ComponentScan(excludeFilters { Filter(type …