LeetCode 784. 字母大小写全排列

重铸国一荣光,省二义不容辞

文章目录

题目

  • 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

示例1:

输入:S = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

示例2:

输入:S = "3z4"
输出:["3z4", "3Z4"]

示例3:

输入:S = "12345"
输出:["12345"]

题解

  • 采取深度优先算法,DFS 遍历

  • Java Character.isDigit() 方法,判断字符是否为数字

在这里插入图片描述

代码

package leetcodePlan;

import java.util.ArrayList;
import java.util.List;

public class P0784 {

	public static void main(String[] args) {

		String S = "a1b2"  ;
		
		List<String> lists = P0784.fun(S);
	    System.out.println(lists);
		
	}
	
	static List<String> res = new ArrayList<>() ;
	public static List<String> fun(String s){
		char[] chs = s.toCharArray() ;
		int n = chs.length ;
		dfs(chs,n,0) ;
		
		return res ;
	}
	
	public static void dfs(char[] chs ,int n ,int begin) {
		res.add(new String(chs)) ;
		for(int i = begin ; i< n ;i++) {
			if(!Character.isDigit(chs[i])) {
				char tmp = chs[i] ;    // 记录用于回溯
				System.out.println("递归前"+ res);
				chs[i] = (char)(chs[i] - 'a' >= 0 ? chs[i] -32 : chs[i] + 32) ;   // 大小写转换
				dfs(chs,n,i+1) ;
				chs[i] = tmp ;   // 回溯
				System.out.println("递归后"+ res);
			}
		}
	}
}

  • 精彩之处在于,使用 tmp 记录,用于回溯。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值