• LeetCode: Multiply Strings


    Title:

    Given two numbers represented as strings, return multiplication of the numbers as a string.

    Note: The numbers can be arbitrarily large and are non-negative.

    不难,但是也不容易一次AC,说明自己考虑问题不够仔细

    class Solution {
    public:
        string multiply(string num1, string num2) {
            string result;
            result.push_back('0');
            if ((num1.size() == 1 && num1[0] == '0') || (num2.size() == 1 && num2[0] == '0'))
                return result;
            for (int i = num2.size()-1; i >= 0; i--){
                int plus = 0;
                string s;
                for (int t = 0; t<num2.size()-i-1; t++){
                    s.push_back(result[t]);
                }
                
                int a = num2[i] - '0';
                int p = num2.size() - i -1;
                for (int j = num1.size()-1; j >=0; j--){
                    int m;
                    int b= num1[j]-'0';
                    if (p < result.size())
                        m = a * b + plus + result[p]-'0';
                    else
                        m = a * b + plus;
                    p++;
                    plus = m / 10;
                    s.push_back((m % 10)+'0');
                }
                if (plus != 0)
                    s.push_back(plus+'0');
                result = s;
                //results.push_back(result);
            }
            reverse(result.begin(),result.end());
            return result;
        }
    };

    更好的方法

    class Solution {
    public:
        string multiply(string num1, string num2) {
            if(num1=="0" || num2=="0") return "0";
            int l1 = num1.length(), l2 = num2.length();
            int* n1 = new int[l1];
            int* n2 = new int[l2];
            int* res = new int[l1+l2];
            memset(res,0,sizeof(int)*(l1+l2));
            for(int i=0; i<l1; ++i)
                n1[i] = num1[i] - '0';
            for(int i=0; i<l2; ++i)
                n2[i] = num2[i] - '0';
            
            for(int i=0; i<l1; ++i)
                for (int j=0; j<l2; ++j)
                    res[i+j+1] += n1[i]*n2[j];
    
            string ss = "";
            for (int k=l1+l2-1; k>=0; --k){
                if(k>0) res[k-1] += res[k]/10;
                res[k] %= 10;
                ss = char(res[k]+'0')+ss;
            }
            ss = ss[0]=='0'? ss.substr(1):ss;
            //return ss.empty()?"0":ss;
            return ss;
        }
    };
  • 相关阅读:
    javascript 下拉列表 自动取值 无需value
    gopkg:一种方便的go pakcage管理方式
    编译GDAL使用最新的HDF库配置文件
    leetcode:程序员面试技巧
    【Unity Shader实战】卡通风格的Shader(一)
    GDAL1.11版本对SHP文件索引加速测试
    【Unity Shaders】Shader学习资源和Surface Shader概述
    关于rowid的函数
    java基本类型的大小
    【转载】oracle之rowid详解
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4453419.html
Copyright © 2020-2023  润新知