码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode784

时间:2018-09-29 22:47:22      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:etc   var   tco   style   应该   add   public   独立   级别   

这道题经过独立思考,通过使用二进制编码的方式来进行处理。分几个步骤一层一层的处理,最终解决了,这道题感觉应该属于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

标签:etc   var   tco   style   应该   add   public   独立   级别   

原文地址:https://www.cnblogs.com/asenyang/p/9726834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!