将字符串转为数组,进行减法模拟运算;
代码+详细注释
小小蒟蒻的代码若有错误或不足,欢迎各位大佬指正
class Solution { public: bool com(string s1,string s2){//判断两个字符串哪个大,要用大数减小数; int u=s1.size(),v=s2.size(); if(u!=v) return u>v; for(int i=0;i<u;i++){ if(s1[i]!=s2[i]){ return s1[i]>s2[i]; } } return true; } string substring(string num1, string num2) { // write code here, int flag=0; vector<int>vec1(100100); //数组一定要开大一点,容易越界; vector<int>vec2(100100); if(!com(num1,num2)){ //进入判断,若第二个字符串大则交换,并进行标记; flag=1; //标记,后续加负号; num1.swap(num2); } int n1=num1.size(),n2=num2.size(); for(int i=0;i<n1;i++){ //字符串转数组;(倒着存储有助于我们后面减的时候,对齐数位) vec1[n1-i]=num1[i]-'0'; } for(int i=0;i<n2;i++){ //字符串转数组;(同理) vec2[n2-i]=num2[i]-'0'; } int n=max(n1,n2); //差数组的长度选择两个数组中最大长度的数组; vector<int>c(100100); for(int i=1;i<=n;i++){ //减法模拟 if(vec1[i]<vec2[i]){ //若小于则向后借10;(因为前面数组是倒着存储的) vec1[i+1]--; //后面的数减1; vec1[i]+=10; //借10; } c[i]=vec1[i]-vec2[i];//两数相减; } while(c[n]==0&&n>1){ //删除前导0; n--; } string a=""; if(flag){ a+="-"; //若被标记过,则加负号; } for(int i=n;i>0;i--){ a+=to_string(c[i]);//将数组转为字符; } return a; } };
创作不易,可否求个小赞赞