1. 程式人生 > >常見程式設計題——陣列中和為某一個值

常見程式設計題——陣列中和為某一個值

題目描述:給定一個有n個數字的陣列,給出一個數字m,要求所有和等於m的組合。

思路:從頭遍歷,查詢當前這個數在路徑中時能不能和後面的數構成和,如果可以就輸出這個路徑,如果加上這個數比和sum大,說明不能有當前這個數,如果現在的和比sum小,就放入路徑,繼續查詢。

在VS2010中的程式如下:

#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;

void findpath(vector<int> a,vector<int> path,int n,int start,int sum){
	for(int i=start;i<n;i++){//從第一個數開始遍歷
		sum-=a[i];
		path.push_back(i);
		if(sum==0){//說明找到了滿足要求的一條路徑
			for(int j=0;j<path.size();j++){
				cout<<a[path[j]]<<" ";
			}
			cout<<endl;
			path.clear();
		}
		else if(sum>0){//目前的和小於要求的和,要繼續往後找
			findpath(a,path,n,i+1,sum);
		}
		sum+=a[i];//如果和大於了sum,說明當前這個數不能加入路徑裡
		if(path.size()>0)path.pop_back();

	}
}
int main(){
	int n;
	cin>>n;
	int temp;
	vector<int> data;
	for(int i=0;i<n;i++){
		cin>>temp;
		data.push_back(temp);
	}
	int sum;
	cin>>sum;
	vector<int> allpath;
	findpath(data,allpath,n,0,sum);
	cin.get();
	cin.get();
	return 0;
}



相關推薦

常見程式設計——陣列中和一個

題目描述:給定一個有n個數字的陣列,給出一個數字m,要求所有和等於m的組合。 思路:從頭遍歷,查詢當前這個數在路徑中時能不能和後面的數構成和,如果可以就輸出這個路徑,如果加上這個數比和sum大,說明不能有當前這個數,如果現在的和比sum小,就放入路徑,繼續查詢。 在VS20

陣列中和一個

#include<iostream> #include<vector> #include <algorithm> using namespace std;

陣列中和的全部組合

下面先貼出程式碼,然後再說幾點應該特別注意的。 void Print(int* numbers, int start, int end) { for(int i = start; i<= end; ++i) { cout<<numbers[i];

查詢陣列中和給定的三元組

問題描述 給定一個數組arr,以及一個數字target。求陣列中和為target的三個數。要求給出所有解。陣列中的每個數在每組解中只能出現一次。 解法 方法一:如果用暴力方法,時間複雜度是o(n3) 方法二:利用C++11中的unordere

劍指offer程式設計(JAVA實現)——第24:二叉樹中和的路徑

github https://github.com/JasonZhangCauc/JZOffer import java.util.ArrayList; /** * * 劍指offer程式設計題

劍指offer:[程式設計]二叉樹中和的路徑(Python)

題目描述:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。第一次做的解題思路:二叉樹的深度優先搜尋~搜尋到葉子節點後,將該葉子節點pop出來,同時記得num要加回去,開始另一條支路的搜

演算法程式設計-求陣列中和0的最長子串(非連續最長子串+連續最長子串)

輸入:int 型陣列由正數、負數、0組成 輸出:最長和為0的子序列 分析: 1)連續子串 2)非連續子串 void findTargetLen1(vector<int>nums,int sum,int len,int& maxLen,int st

劍指offer66--Java實現,c++實現和python實現 24.二叉樹中和的路徑

題目描述 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前) C++ /* struct TreeNode { int val; s

二叉樹中和一個值得路徑

題目 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 程式碼 ArrayList<ArrayList<Integer>> listAll=new ArrayL

牛客網刷|二叉樹中和的路徑

題目來源:牛客網 程式設計連線 題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解析: 經典DFS演算法,深度優先演算法 cl

劍指Offer 25 二叉樹中和的路徑 Java

對二叉樹的相關演算法還是不瞭解。 這裡有兩點是之前所用不好的: 1:把棧用進來; 2:有一個變數記錄當前的數值,這個在遞迴的過程當中就能夠得到之前的值。 package test; import java.util.Stack; public class FindPat

劍指offer第24(二叉樹中和的路徑)

題目:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思想:由於本題中的根要在前面,因而我們首先想到的是前序遍歷。當用前序遍歷的方式訪問某一節點時,我們把該節點新增到路徑上,並累加

【LeetCode & 劍指offer刷】樹9:34 二叉樹中和的路徑(112. Path Sum)

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 112. Path Sum Given a binary tree and a sum, determine if the tree has a root-to-leaf path suc

劍指offer第二十四【二叉樹中和的路徑】c++實現

題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 先序遍歷二叉樹,用一個數組記錄當前路徑,如果遍歷到葉子節點就進行判斷是否和給定值相等。 class Solution { public: vect

牛客網刷——二叉樹中和的路徑

題目描述: 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前) 解答:    private ArrayList&l

[程式設計師面試題精選100]4.二叉樹中和的所有路徑

【題目】 輸入一個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。 打印出和與輸入整數相等的所有路徑。 例如輸入整數22和如下二元樹                                             10

二叉樹中和的所有路徑

說明 util ray 如果 tree 二叉樹 節點 integer fin 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 import java.util.ArrayList

24、劍指offer--二叉樹中和的路徑

val 遍歷 描述 所有 oid res bold eno bsp 題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思路:本題采用先序遍歷,遍歷到葉子節點,如果和

劍指Offer-- 二叉搜索樹中和的路徑

div find 對象 return ref span tree com -- 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 本身題目不是很難,但是因為剛接觸pyhon,對一

二叉樹中和的路徑

one 結點 col val exp fff return back 節點 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思路:深搜(DFS) struct TreeN