首页 > 其他分享 >LeekCode415--LeekCode415

LeekCode415--LeekCode415

时间:2022-11-15 10:12:20浏览次数:42  
标签:字符 二进制 -- int add LeekCode415 ASCII

此题出现在 BIGO的2面中

原题

https://leetcode.cn/problems/add-strings/solutions/357938/zi-fu-chuan-xiang-jia-by-leetcode-solution/

题解

 1 public class LeekCode415 {
 2 
 3     public static void main(String[] args) {
 4         System.out.println(addStrings("456","77"));
 5     }
 6 
 7     public static String addStrings(String num1, String num2) {
 8         //我们定义两个指针 i和 j 分别指向 num1和 num2​的末尾,即最低位,同时定义一个变量 add 维护当前是否有进位,然后从末尾到开头逐位相加即可。
 9         int i = num1.length() - 1, j = num2.length() - 1, add = 0;
10         StringBuilder ans = new StringBuilder();
11         //注意条件中的add != 0,当最高位相加后如果有进位,那么add!=0,下一次的i和j都<0,依然要进行运算
12         while (i >= 0 || j >= 0 || add != 0) {
13             //“字符型减'0'可以得到整数型”,在指针当前下标处于负数的时候返回 0,等价于对位数较短的数字进行了补零操作
14             int x = i >= 0 ? num1.charAt(i) - '0' : 0;
15             int y = j >= 0 ? num2.charAt(j) - '0' : 0;
16             int result = x + y + add;
17             //“%”是取余
18             ans.append(result % 10);
19             add = result / 10;
20             i--;
21             j--;
22         }
23         // 计算完以后的答案需要翻转过来
24         ans.reverse();
25         return ans.toString();
26     }
27 }
View Code

运行结果

知识点补充

“字符型减'0'可以得到整数型”的原因分析

  计算机中的字符包括数值、英文字母、标点符号、制表符号及其他符号。每一个字符都用一个特定的二进制代码来表示,这就是字符的编码。目前,字符编码采用的是美国信息交换标准代码,即ASCII 码 。它是用一个字节的低七位来表示一个字符的编码, 2^7 =128 ,最高位是 0 ,所以,用 ASCII 码可表示 128 个字符)。有了这个我们就不怕我们输入的字符,计算机不懂了。于是只要我们自己在程序中输入一个字符(例如:‘a’)计算机在编译过程中自动将它转换成97的二进制码,这就是为什么说字符本质上也是整型了,因为字符变量只是告诉计算机,我这个数据只占一个字节,也就是说我超不出128这个数去。而int则告诉我这个数可能很大,有65534那么大呢

    下面就说说为什么字符减'0'可以到相应的整数。现在比如我们要字符‘1’转换成数字1,就这么一个变化,我们看到了大家注意了字符型常量用''括起来的原因是,它们在计算机中都以各自的ASCII表示。而‘1’的对应编码是49的二进制码,但是我们的数字1,就等于1呀,所以为了由原来的‘1’实际上就是49的二进制变成现在的1对应的二进制1,只好用49-48=1了。但是在ASCII码里‘0’对应的刚好是48的二进制码,所以我们转换的时候只需要‘1’-‘0’=1;就可以了。而数字的ASCII码是按顺序规定的。所以其它字符要转换成数字都可以用减‘0’来表示。比如‘2’的ASCII是50,而我们要得到数字2,于是用‘2’-48=2了。看来当我们知道数据在计算机中的存储规则的时候,问题就迎刃而解了。

     大小写字母的转换:先看ASCII码:a~z是97~122的二进制,而A~Z是65~90的二进制编码,于是我们就得出:大写字母=小写字母-32 ;这个公式了。当然这里的32我也可以这么写‘Z’=‘z’-'空格'。因为空格的ASCII码是32对应的二进制编码。

标签:字符,二进制,--,int,add,LeekCode415,ASCII
From: https://www.cnblogs.com/liaowenhui/p/16891488.html

相关文章

  • 电脑桌面图标怎么变小
    很多朋友在使用电脑时,嫌弃电脑桌面上的图标太大,如果图标太大会占据不少桌面的空间,想要变小一些,但又不知道方法。在使用电脑时桌面图标大小想要调整怎么调整,其实不难。那么......
  • 二十四、图遍历的应用
    一、判断路径是否存在判断有向图$G$中是否存在从$s$顶点到$t$顶点的路径。  如果从$s$到$t$的路径存在,则从$s$出发进行遍历,必能搜索到$t$,且一旦访问到$......
  • 自定义定时器
    自定义定时器#include<iostream>#include<sys/epoll.h>#include<chrono>#include<functional>#include<memory>#include<set>int64_tgid{0};structNodeBa......
  • pytester
    目录介绍cd到临时文件目录创建文件相关介绍pytester是pytest框架的内置fixture,想使用pytester要在conftest.py或者是用例文件的最上面添加pytest_plugins="pytester"......
  • this和super关键字
    this关键字this的本质就是:创建好的对象的地址->代表当前对象构造方法是创建java对象的重要途经,通过new关键字调用构造器时,构造器返回该类对象,但是该对象并不完全由构......
  • CB利用链及无依赖打Shiro
    前言前面已经学习了CC1到CC7的利用链,其中在CC2中认识了java.util.PriorityQueue,它在Java中是一个优先队列,队列中每一个元素有自己的优先级。在反序列化这个对象时,为了保......
  • Qt音视频开发02-海康sdk解码(支持句柄/回调/gpu模式/支持win/linux)
    一、前言为何还要选用使用海康sdk,之前不是ffmpeg已经牛皮吹上天了吗?这个问题问得好,那是因为无论ffmpeg也好还是vlc/mpv之类的,都是实现的播放相关,不同的监控硬件厂家对应设......
  • 74.数组map能干什么,会改变原数组吗
    map是处理数据的方法,不会改变原数组,会返回一个新数组;filter也不会改变原数组,会返回新数组;forEach也不会改变原数组,不会返回新数组;reduce不会改变原数组; 是否改......
  • CentOS8.4(Anolis 8.6) Apache 2.4 Web 服务器配置记录(2022.11)
    1.首先安装nginx,因为目前nginx在Web服务市场的占比(26.51%)已经超过Apache(21.40%)。  2.安装nginx步骤(在阿里云虚拟主机CentOS8.4 123.56.43.47中安装)#yum......
  • 立创商城封装搜索载入插件 AD-LCSC 转载
    AD-LCSC脚本地址:Releases·TimonPeng/AD-LCSC-Addons(github.com)立创商城封装搜索载入插件开源AltiumDesigner立创商城封装搜索载入插件-立创社区(szlcsc.co......