Swift-字符串的全排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba.
核心代码:
<pre><code>`

// 去重
func isCanSWap(arr:[String],begin:Int,end:Int) -> Bool {
    var result:Bool = true
    
    for i in begin..<end {
        if arr[i] == arr[end] {
            result = false
            break
        }
    }
    return result
}

// 字符串特定区间的字符串排列
func full_permutation(arr:[String],begin:Int,end:Int) {
    var temp:[String] = arr
    if begin == end - 1 { // 递归之后输出
        let data:[String] = Array(arr[0..<end])
        count += 1
        print("排列---\(data)")
    } else {
        for i in begin..<end {
            let result:Bool = isCanSWap(arr: temp, begin: begin, end: i)
            if result {
                if i != begin {
                    swap(&temp[i], &temp[begin]) // 字符串交换
                }
                
                full_permutation(arr: temp, begin: begin+1, end: end)
                
                if i != begin {
                    swap(&temp[i], &temp[begin]) // 字符串恢复
                }
            }
        }
    }
}`</code></pre>

如果只是abc排列,字符串中没有重复的字母,isCanSwap可以不需要,考虑去重的问题需要加入,假设输入的字符串abb,最终输出的结果只有三种.
测试代码:
<pre><code>`

var arr:[String] = ["a","b","c"]

var permutation:Permutation = Permutation()
permutation.full_permutation(arr: arr, begin: 0, end: arr.count)
print("FlyElephant--(permutation.count)")`</code></pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...
    MinoyJet阅读 13,864评论 4 11
  • 今天学习了字符串全排列问题的递归与非递归实现,其中,递归实现是把递归放在循环中,到现在我也没看懂到底是个什么样的过...
    pw007992阅读 4,066评论 0 1
  • 题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能...
    哦漏昵称已被占用阅读 2,669评论 0 0
  • 一、题目 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc。则打印出由字符a、b、c 所能排列...
    brzhang阅读 2,823评论 0 1
  • 诗或散文的拈来或许是必与情相关的,沉寂的夜晚竟也写不出什么来,约莫是论文型的东西写多了,那些汇聚了感性的冲动的文字...
    寒清墨影阅读 1,634评论 0 1

友情链接更多精彩内容