循环数组
arr = [
[1, 2],
[3, 4],
]
输出[13, 14, 23, 34];
循环数组
arr = [
[1, 2],
[3, 4],
[5, 6],
]
输出[135, 136, 145, 146, 235, 236, 245, 246]
循环的数组长度未知,数组的每个子数组长度未知。
要写一个通用的方法?
function func(arr) { var ans = []; var dfs = function(pos, d) { if(pos >= arr.length) { ans.push(d); return; } for(var i=0; i<arr[pos].length; i++) dfs(pos+1, d*10+arr[pos][i]); }; dfs(0, 0); return ans; }
虽然还没验证!不过还是感谢大佬的热心帮助!!!
用递归
我也晓得要用递归啊
定义一个方法,将你要递归的数组当参数传进来
为什么要用递归啊?你的树结构层级不定么?
会出现 [[[1,2],[3,4]],[5,6]]这种情况吗?
不会
#include<iostream> #include<string> #include<math.h> using namespace std; int a[3][2]= {{1,2},{3,4},{5,6}}; int res[1005]; int ans[1005]; int q; int p; int x; void dfs(int n) { if(n==x) { for(int i=0;i<p;i++) ans[q]+=res[i]*pow(10.0,p-i-1); q++; return; } int l = sizeof(a[n])/sizeof(a[n][0]); for(int i=0;i<l;i++) { res[p++]=a[n][i]; dfs(n+1); p--; } } int main() { q=0;p=0; x = sizeof(a)/sizeof(a[0]); dfs(0); for(int i=0;i<q;i++) { printf("%d ",ans[i]); } printf("\n"); }
给定的都是二维数组哦。这是用c++写的,js写也差不多,for循环,数组和递归。