首页 > 试题广场 >

打印全部子序列

[编程题]打印全部子序列
  • 热度指数:1146 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
打印一个字符串的全部子序列,包括空字符串
(注:重复的也要输出,至于返回顺序请观察 示例1 )
示例1

输入

"abc"

输出

["","c","b","bc","a","ac","ab","abc"]
// 对字符串的每个字符,都有取和不取两种选择
// 子序列个数总共有2^n个
    
int recursive(vector<string>& result,int i,string curStr,string s){
        if(i == s.size()){
            result.push_back(curStr);
            return 0;
        }
        recursive(result,i+1,curStr,s);
        recursive(result,i+1,curStr+s[i],s);
        return 0;
    }
    vector<string> getAllSubs(string s) {
        // write code here
        vector<string> result;
        recursive(result, 0, "", s);
        return result;
    }

---- 
发表于 2021-09-04 21:01:45 回复(0)
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 用来求出一个字符串的全部子序列,包含空字符串(因为这个不好统一输出的子序列,所以按照上课所讲写这个代码)
     * @param s string字符串 需要打印全部子序列的那个字符串
     * @return string字符串一维数组
     */
    public String[] getAllSubs (String s) {
        // write code here
        char[] str = s.toCharArray();
        String path = "";
        List<String> ans = new ArrayList<>();
        process1(str, 0, ans, path);
        final int size =  ans.size();
        String[] arrString = (String[])ans.toArray(new String[size]);
        return arrString;
    }

    public static void process1(char[] str, int index, List<String> ans, String path){
        if (index == str.length)
        {
            ans.add(path);
            return;
        }
        String no = path;
        process1(str, index + 1, ans, no);
        String yes = path + String.valueOf(str[index]);
        process1(str, index + 1 , ans, yes);
    }
}
发表于 2021-03-06 17:47:07 回复(0)

问题信息

上传者:小小
难度:
2条回答 1487浏览

热门推荐

通过挑战的用户

打印全部子序列