博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Multiply Strings
阅读量:4150 次
发布时间:2019-05-25

本文共 2231 字,大约阅读时间需要 7 分钟。

class Solution {//draw it out and then observe it to find out the regular pattern//more practice is neededpublic:	string multiply(string num1, string num2) {		// Start typing your C/C++ solution below		// DO NOT write int main() function		if(num1.size() == 0 || num2.size() == 0) return string("");		string ans(num1.size()+num2.size()+1, '0');//important observation		reverse(num1.begin(), num1.end());		reverse(num2.begin(), num2.end());		for (int digIdx2 = 0; digIdx2 < num2.size(); ++digIdx2)//the below number num2		{			int dig2 = num2[digIdx2]-'0';			int carry = 0;			for (int digIdx1 = 0; digIdx1 < num1.size(); ++digIdx1)//the up number num1 			{				int dig1 = num1[digIdx1]-'0';				int tmp = ans[digIdx1+digIdx2]-'0';				int sum_cur = carry+dig1*dig2+tmp;				ans[digIdx1+digIdx2] = sum_cur%10+'0';				carry = sum_cur/10;			}			ans[digIdx2+num1.size()] = carry+'0';			}		reverse(ans.begin(), ans.end());		int posStart = ans.find_first_not_of('0');		if(posStart < 0 || posStart >= ans.size()) //in case of ""000"			posStart = ans.size()-1;		int len = ans.size()-posStart;		return ans.substr(posStart, len);	}};

second time

class Solution {public:    string multiply(string num1, string num2) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        reverse(num1.begin(), num1.end());        reverse(num2.begin(), num2.end());        int carry = 0;        string result;        for(int len = 0; ;++len)        {            int sum = 0;            bool flag = false;            for(int i = 0; i < num1.size(); ++i)            {                int j = len-i;                if(j < 0 || j >= num2.size()) continue;                sum += (num1[i]-'0')*(num2[j]-'0');                flag = true;            }            if(!flag) break;            sum += carry;            result.push_back(sum%10+'0');            carry = sum/10;        }                while(carry > 0)        {            result.push_back(carry%10+'0');            carry /= 10;        }        reverse(result.begin(), result.end());        if(result.find_first_not_of('0') == string::npos) return "0";        else return result.substr(result.find_first_not_of('0'), result.size()-result.find_first_not_of('0'));    }};

转载地址:http://zmxti.baihongyu.com/

你可能感兴趣的文章
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>