[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. function f($str,$n){if($n -eq 1){foreach($i in $str){$i}}else{foreach($j in (f -str $str -n ($n-1))){foreach($k in $str){$j+$k}}}}
  2. $str="123abc".TocharArray()
  3. $n=6
  4. 1..$n|%{f -str $str -n $_}>111.txt
复制代码

TOP

效率应该不高,就用了一个递归,你可以在这个基础上优化速度

TOP

本帖最后由 pd1 于 2023-9-9 02:02 编辑
  1. function f($str,$n)
  2. {
  3. [System.Collections.ArrayList]$a=@()
  4. [System.Collections.ArrayList]$b=@()
  5. if($n -eq 1)
  6. {
  7. foreach($i in $str)
  8. {
  9. $c=$a.Add($i)
  10. }
  11. $c=$b.Add($a)
  12. return $b
  13. }
  14. else
  15. {
  16. $c=$b.Add($str)
  17. for($m=0;$m -lt $n-1;$m++)
  18. {
  19. foreach($j in $b[$m])
  20. {
  21. foreach($k in $str)
  22. {
  23. $c=$a.Add($j+$k)
  24. }
  25. }
  26. $c=$b.Add($a)
  27. $a=@()
  28. }
  29. return $b
  30. }
  31. }
  32. $str="abc123".TocharArray()
  33. $n=1
  34. (f -str $str -n $n)>result.txt
复制代码

TOP

回复 9# bylove


    生成3位数量太少了,比较难比较速度,把位数改多点试试
比如 1234567890生成5位   分别耗时  2.674s   1.062s    11.57s
比如 1234567890生成6位   分别耗时  25.77s    9.59s      120.19s

所以还是4楼的应该是快一点。
递归这个你可以百度一下看看原理,就是重复调用函数自己吧
4楼的是一个优化,叫动态规划。
都是网上搜来的,具体的我也没啥研究

TOP

返回列表