• Leetcode: Multiply Strings


    题目

    大整数乘法

    思路:

    1. 转化成分组背包问题, 代码比较 tricky

    2. 将 string 相乘转化为 string 按位乘再加的过程

    3. 细节. 不同长度 string 相加可以先补 0, 对齐. 按位相乘的时候, 可以从左向右计算, 便于移位

    代码:

    class Solution {
    public:
        string multiply(string num1, string num2) {
    		if(num1.size() <= 0 || num2.size() <= 0)
    			return "";
    		if(num1.size() == 1 && num1[0] == '0')
    			return "0";
    		if(num2.size() == 1 && num2[0] == '0')
    			return "0";
    
    		if(num1.size() < num2.size()) {
    			swap(num1, num2);
    		}
    		string res;
    		for(int i = 0; i < num2.size(); i++) {
    			string party = oneBitMultipy(num1, num2[i]-'0');
    			res.push_back('0');
    			res = add(res, party);
    		}
    		return res;
        }
    
    	string add(string num1, string num2) {
    		string res = "";
    		int len1 = num1.size(), len2 = num2.size();
    		if(len1 < len2) {
    			res.append(num2.size()-num1.size(), '0').append(num1);
    			num1 = res;
    		}else if(len1 > len2) {
    			res.append(num1.size()-num2.size(), '0').append(num2);
    			num2 = res;
    		}
    
    		res.clear();
    		int leftover = 0, len = num1.size()-1;
    		int i;
    		for(i = 0; i < num1.size(); i ++) {
    			int tmp = leftover+num1[len-i]-'0'+num2[len-i]-'0';
    			res.push_back(tmp%10+'0');
    			leftover = tmp/10;
    		}
    		
    		if(leftover) {
    			res.push_back('0'+leftover);
    		}
    		reverse(res.begin(), res.end());
    		return res;
    	}
    
    	string oneBitMultipy(string num1, int bit) {
    		string res;
    		int leftover = 0;
    		for(int i = num1.size()-1; i >= 0; i--) {
    			int tmp = (num1[i]-'0')*bit + leftover;
    			res.push_back(tmp%10+'0');
    			leftover = tmp/10;
    		}
    		if(leftover) {
    			res.push_back(leftover+'0');
    		}
    		reverse(res.begin(), res.end());
    		return res;
    	}
    };
    

      

  • 相关阅读:
    (8) MySQL主从复制架构使用方法
    (7) MySQL数据库备份详解
    (6) MySQL慢查询日志的使用
    解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题
    (5) 电商场景下的常见业务SQL处理
    (4) MySQL中EXPLAIN执行计划分析
    (3) MySQL分区表使用方法
    (2) 电商数据库表设计
    (1) Mysql高性能优化规范建议
    linux每日命令(39):lsof命令
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3510935.html
Copyright © 2020-2023  润新知