问题描述
我正在解决一个关于 leetcode 的问题,我必须将字符串相乘,但出现了我无法理解的错误
第 518 行:字符 69:运行时错误:将非零偏移 18446744073709551615 应用到空指针 (basic_string.h) 总结:UndefinedBehaviorSanitizer:undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h :527:69
这是我的代码
string multiply(string s1,string s2) {
vector<int> vec(s1.length()+s2.length(),0);
for(int i=s2.length()-1;i>=0;i--){
for(int j=s1.length()-1;j>=0;j--){
int pro = (s1[j]-'0')*(s2[i]-'0') ;
//borrow sent to next
int sum = vec[i+j+1] + pro;
vec[i+j+1] = (sum%10);
vec[i+j] += (sum/10);
}
}
string ans="";
for(int i=0; i<(s1.length()+s2.length());i++){
if(ans=="" && vec[i]==0){
continue;
}
ans.push_back(vec[i]+'0');
}
if(ans==""){
return 0;
}
return ans;
}
链接:https://leetcode.com/problems/multiply-strings/
解决方法
import numpy as np
def summary(x):
mean1 = np.mean(x)
Dict = {"mean":mean1}
return Dict
print(summary([1,2,3,4]))
print(summary([[1,2],[3,4]]))
不好。此函数返回字符串,因此 if(ans==""){
return 0;
}
表示 return 0;
。
假设这里的 return string(0);
是 std::string
,构造函数
string
将用于此。
这表示请求将basic_string( const CharT* s,const Allocator& alloc = Allocator() );
(从nullptr
转换而来)转换为字符串,但这是无效的。
你应该使用
0
相反。
,对于 ans=""
的情况,
不是返回 "0"
(string),而是返回 0
(Integer )。
由于返回类型是字符串,因此会导致问题。
if(ans=="")
{
return "0";
}
我认为这应该可以正常工作。