leetcode784
Posted AsenYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode784相关的知识,希望对你有一定的参考价值。
这道题经过独立思考,通过使用二进制编码的方式来进行处理。分几个步骤一层一层的处理,最终解决了,这道题感觉应该属于medimu级别。
public class Solution { /// <summary> /// 列出二进制表示 /// </summary> /// <param name="count"></param> /// <returns></returns> public IList<string> GetBinaryPartten(int count) { var list = new List<string>(); //int count = 5;//字母数量 int N = (int)Math.Pow(2, count) - 1;//最大值 for (int i = 0; i <= N; i++) { Stack<int> St = new Stack<int>(); int x = i;//1010 while (x != 0) { int y = x & 1; St.Push(y); x >>= 1; } int len = St.Count;//len<=count string result = ""; for (int j = 0; j < count - len; j++) { result += "0"; } while (St.Any()) { int y = St.Pop(); result += y.ToString(); } list.Add(result); } return list; } public IList<string> LetterCasePermutation(string S) { S = S.ToLower(); var dic = new List<KeyValuePair<int, string>>(); var list = new List<string>(); var numdic = new HashSet<char> { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘ }; int count = 0; for (int i = 0; i < S.Length; i++) { if (numdic.Any(x => x == S[i]))//是数字 { continue; } else//是字母 { count++;//记录字母的数量 dic.Add(new KeyValuePair<int, string>(i, S[i].ToString()));//记录字母的下标和字母 } } var list0 = GetBinaryPartten(count); foreach (var l0 in list0) { string temp = S;//原格式 string map = l0;//当前格式编码 //解析编码 for (int i = 0; i < map.Length; i++) { //按位解析,i表示dic[i] var code = map[i];//code表示编码 var d = dic[i];//根据当前位的编码,解析出字符 var position = d.Key;//原串中的下标 var chars = d.Value;//当前字符 if (code == ‘0‘) { chars = chars.ToLower(); } else { chars = chars.ToUpper(); } //对当前位进行处理 string prefix = temp.Substring(0, position); //string mid = temp.Substring(position, 1); string mid = chars;//替换此位字符形式 string next = temp.Substring(position + 1); temp = prefix + mid + next; } //这里将此格式的字符串加入list中 list.Add(temp); } return list; } }
以上是关于leetcode784的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 784. Letter Case Permutation (字母大小写全排列 )
leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段