IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 关于求和问题 右侧对齐 -> 正文阅读

[数据结构与算法]关于求和问题 右侧对齐

我们先来看一个简单题

?思路: 我们大多数人看到这个题肯定想把字符串转化为数字 然后进行一顿操作(x)

因为字符串所表示的数的大小可能会大于int double longlong类型所能表示范围

正确思路 我们应该进行右侧对齐 然后设置一个变量判断是否有进位 然后返回

3//代码实现

class Solution {
public:
? ? string addBinary(string a, string b) {
? ? ? ? ?string res="";
? ? ? ? int n=a.size()-1;
? ? ? ? int m=b.size()-1;
? ? ? ? int ?pre=0;//是否有向前进位
? ? ? ? int cur=0;
? ? ? ? while(n>=0 || m>=0){
? ? ? ? ? ??
? ? ? ? ? ? int cur =(n>=0?a[n]-'0':0)+(m>=0?b[m]-'0':0)+pre;
? ? ? ? ? ? res+=cur%2==0?'0':'1';
? ? ? ? ? ? pre=cur/2;
? ? ? ? ? ? n--;
? ? ? ? ? ? m--;
? ? ? ? ? ??
? ? ? ? }
? ? ? ? if(pre!=0){
? ? ? ? ? ? res+=pre+'0';
? ? ? ? }
? ? ? ? ? reverse(res.begin(),res.end());
? ? ? ? return res;
? ? }
};?

?

如果把这个字符串改成链表应该如何操作呢

?我们还是一样的思路 我们还是从低位开始计算 我们应该 先把链表翻转 然后把计算结果进行再次翻转然后返回就得到了正确答案

思路 1.进行把两个链表进行翻转//??https://leetcode-cn.com/problems/reverse-linked-list/

? ? ? ? ?2.然后进行跟上一道题一样的操作

1.如何翻转链表?

代码实现:

  ListNode* reversList(ListNode *head){
        if(head==NULL) return NULL;
        ListNode*cur=head;
        ListNode* pre=NULL;
        while(cur!=NULL){
            ListNode *pnext=cur->next;
            cur->next=pre;
            pre=cur;
            cur=pnext;
        }
        return pre; 
    }

2.然后进行操作

   ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //右侧对齐
     ListNode*r1=reversList(l1);
     ListNode*r2=reversList(l2);
     ListNode *dummy=new ListNode(0);
        ListNode* cur=dummy;
        int sum=0;
        int carry=0;//记录进位问题
      while(r1!=NULL || r2!=NULL)
      {
          cur->next = new ListNode(0);//新建节点
          cur = cur->next;
          int n1=0;
          if(r1!=NULL){
              n1=r1->val;
              r1=r1->next;
          }
             int n2=0;
              if(r2!=NULL){
                  n2=r2->val;
                  r2=r2->next;
              }
          sum=n1+n2+carry;
          carry=sum/10;
          cur->val=sum%10;
      }
        if(carry)
        {
            cur->next=new ListNode(1);
        }
        ListNode *r3=dummy->next;
       delete dummy;
        dummy = nullptr;
        ListNode* l3 = reversList(r3);
        return l3;
    }
};

这里应用了虚拟头结点需要接下来继续研究

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:47:48  更:2021-09-04 17:47:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:45:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码