9.18(40. 组合总和 II 43.字符串相乘)

2024-03-30 01:32

本文主要是介绍9.18(40. 组合总和 II 43.字符串相乘),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

40. 组合总和 II

本题是上一道题最后一种解法的变形,只需要在其中天上一个条件即可

程序代码如下(可正确运行)
class Solution {
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> result;vector<int> res;sort(candidates.begin(), candidates.end());com(candidates, 0, target, res, result);return result;//直接返回就行了}void com(vector<int> &candidates, int index, int target, vector<int> res, vector<vector<int>> &result) {if (target == 0) {result.push_back(res);return;}else if (target < 0) return;else {for (int i = index; i < candidates.size(); i++) {res.push_back(candidates[i]);com(candidates, i + 1, target - candidates[i], res, result);res.pop_back();while (i<=candidates.size()-2&&candidates[i + 1] == candidates[i])i++;}}}
};int main() {int n,target;cin >> n>>target;vector<int> arr(n);for (int i = 0; i < n; i++) {cin >> arr[i];}Solution bb;vector<vector<int>> s = bb.combinationSum2(arr,target);for (int i = 0; i < s.size(); i++) {for (int j = 0;j< s[i].size(); j++) {cout<<s[i][j]<<" ";}cout << endl;}return 0;
}

43.字符串相乘

long long支持的十进制大约是19位,因此对于110位的数据来说只能理解成字符串。
思路一:
把数据写成vector的形式,Node是一种数据结构,里面包含factor和power分别表示系数以及对应的级数;采用的策略就是对构建的向量逐步调整。

// prictice.cpp: 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include<cmath>
#include<iostream>
#include<string>
#include<cassert>
#include<vector>
#include<limits>
#include <algorithm>  //引入这个之后排序才能使用
using namespace std;
//思路:类似于链表下的乘法struct Node{int factor;//表示系数int power;//表示次方
};
class Solution {
public:string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0")return "0";string s;vector<Node> sn1(num1.size());vector<Node> sn2(num2.size());vector<Node> result;//长度是未知的for (int i = 0; i < num1.size(); i++) {sn1[i].factor = num1[num1.size()-i-1]-'0';sn1[i].power = i;}for (int i = 0; i < num2.size(); i++) {sn2[i].factor = num2[num2.size() - i - 1]-'0';sn2[i].power = i;}//对两个字符串进行处理,即使是long long也没法存储,因此只能这样for (int i = 0; i < num1.size(); i++) {for (int j = 0; j < num2.size(); j++) {Node *p = new Node();Node *b = new Node();p->factor = sn1[i].factor*sn2[j].factor;p->power = sn1[i].power + sn2[j].power;if (p->factor / 10 > 0) {b->factor = p->factor / 10;b->power = p->power+1;p->factor = p->factor % 10;}if(result.size()==0||p->power>result[result.size() - 1].power)result.push_back(*p);else result[p->power].factor += p->factor;//可以直接使用索引delete p;//释放if (b != NULL) {if (b->power>result[result.size() - 1].power)result.push_back(*b);else result[b->power].factor += b->factor;delete b;}}//每次走完一个内部循环,就重新调整一下for (int i = 0; i < result.size() - 1; i++) {//先更改前面的if (result[i].factor >= 10) {result[i + 1].factor += result[i].factor / 10;result[i].factor %= 10;}}if (result[result.size() - 1].factor >= 10) {Node *a = new Node();a->factor = result[result.size() - 1].factor / 10;result[result.size() - 1].factor %= 10;a->power = result.size();result.push_back(*a);delete a;}}//接下来开始对result进行转化for (int i = result.size() - 1; i >= 0; i--) {s += result[i].factor+'0';}return s;}
};int main() {string num1, num2;//设置两个字符串cin >> num1 >> num2;//输入Solution bb;string s = bb.multiply(num1,num2);cout<<s<<endl;return 0;
}

这篇关于9.18(40. 组合总和 II 43.字符串相乘)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860173

相关文章

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else

Go组合

摘要 golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合 组合使用注意项 使用匿名引入的方式来组合其他struct 默认优先调用外层方法 可以指定匿名struct以调用内层方法 代码 package mainimport ("fmt")type People struct{}type Pe

十一、C语言:字符串函数

目录 一、strlen 二、strcpy 三、strcat  四、strcmp 五、strstr 六、strtok 七、strerror 一、strlen 注意:strlen()函数的返回值是size_t,两个size_t相减仍为无符号数 int main(){char arr[10] = "abc";char brr[10] = "abc123";if (strl